2016-04-20 14 views
1

私は最初のAzure Mobile Appを作成しています。既存のWebサイトユーザーデータベースに対して「カスタム認証」を実装したいと考えています。既存のASP.NetのWebサイトでAzure Mobile Appでユーザーを検証するユーザーデータベースを終了する

私はいつもdbo.AspNetUsersテーブルを持っているなど

私は、ユーザーを認証するために、この既存のウェブサイトを呼び出す方法を考え出すことはできません。

私は次のコードを持っていますが、私はAxis Mobile App内から既存のユーザーデータベースと通信するisValidAssertion関数を取得する方法を忘れています。

private static bool isValidAssertion(JObject assertion) 
    { 
     // this is where I want to call the existing user database 

     // this is how it's done in the MVC website 
     //ApplicationSignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 

     return true; 
    } 

    public IHttpActionResult Post([FromBody] JObject assertion) 
    { 
     if (isValidAssertion(assertion)) // user-defined function, checks against a database 
     { 
      JwtSecurityToken token = AppServiceLoginHandler.CreateToken(new Claim[] { new Claim(JwtRegisteredClaimNames.Sub, (string)assertion["username"]) }, 
       mySigningKey, 
       myAppURL, 
       myAppURL, 
       TimeSpan.FromHours(24)); 
      return Ok(new LoginResult() 
      { 
       AuthenticationToken = token.RawData, 
       User = new LoginResultUser() { UserId = (string)assertion["username"] } 
      }); 
     } 
     else // user assertion was not valid 
     { 
      return ResponseMessage(Request.CreateUnauthorizedResponse()); 
     } 
    } 

は誰が正しい方向に私をしてください指すことができます:それはウェブサイトで見つかったこの線路の等価だろう

..

ApplicationSignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 

だから、私は、次のコードを持っていますか?

答えて

0

これにはAsp.Net Identityを使用する必要があります。

基本的にあなたが最初OWINコンテキストを取得するためにBaseApiControllerを作成する必要があります。また、OWINコンテキストを初期化する必要があります

[MobileAppController] 
public class CustomAuthController : BaseApiController 
{ 
    private static bool isValidAssertion(JObject assertion) 
    { 
     var username = assertion["username"].Value<string>(); 
     var password = assertion["password"].Value<string>(); 

     //Validate user using FindAsync() method 
     var user = await this.AppUserManager.FindAsync(username, password); 
     return (user != null); 
    } 
} 

:カスタム認証コントローラに続いて

public class BaseApiController : ApiController 
{ 
    private ApplicationUserManager _appUserManager = null; 
    protected ApplicationUserManager AppUserManager 
    { 
     get 
     { 
      return _appUserManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
     } 
    } 
} 

BaseApiControllerから継承する必要がありますin Startup class

[assembly: OwinStartup(typeof(UPARMobileApp.Startup))] 

namespace UPARMobileApp 
{ 
    public partial class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      ConfigureOWinContext(app); 
      ConfigureMobileApp(app);    
     } 
    } 
} 

public static void ConfigureOWinContext(IAppBuilder app) 
{ 
    // Configure the db context and user manager to use a single instance per request 
    app.CreatePerOwinContext(ApplicationDbContext.Create); 
    app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
} 

設定方法ApplicationDbContextApplicationUserManagerとOWIN構成への詳細については、こちらから読み取ることができます: http://bitoftech.net/2015/01/21/asp-net-identity-2-with-asp-net-web-api-2-accounts-management/

関連する問題