0

私はシンプルなログインルートを作成しようとしていますを承認し、このコードは、ログインしてブラウザにクッキーを送信するために正常に動作しません:ASP.NETアイデンティティ適切

ここ
[Route("Login")] 
[AllowAnonymous] 
public async Task<IHttpActionResult> Login(UserBindingModel model) 
{ 
    if (ModelState.IsValid) 
    {    
     var user = await UserManager.FindUserAsync(model.username, model.password); 

     if (user != null) 
     { 
      await SignInAsync(user, true); 
      return Ok(); 
     }    
    } 

    return BadRequest(); 
} 

が呼び出されていますSignInAsync方法であります:ここでは

private async Task SignInAsync(ApplicationUser user, bool isPersistent) 
{ 
    Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie); 
    var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); 
    Authentication.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); 
} 

は私IdentityConfigです:

public class ApplicationUserManager : UserManager<ApplicationUser> 
{ 
    public ApplicationUserManager(IUserStore<ApplicationUser> store) 
     : base(store) 
    { 
    } 

    public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
    { 
     var manager = new ApplicationUserManager(new TestUserStore()); 

     // Configure validation logic for usernames 
     manager.UserValidator = new UserValidator<ApplicationUser>(manager) 
     { 
      AllowOnlyAlphanumericUserNames = false, 
      RequireUniqueEmail = true 
     }; 
     // Configure validation logic for passwords 
     manager.PasswordValidator = new PasswordValidator 
     { 
      RequiredLength = 6, 
      RequireNonLetterOrDigit = false, 
      RequireDigit = true, 
      RequireLowercase = true, 
      RequireUppercase = false, 
     }; 
     var dataProtectionProvider = options.DataProtectionProvider; 
     if (dataProtectionProvider != null) 
     { 
      manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity")); 
     } 

     return manager; 
    } 

    public async Task<ApplicationUser> FindUserAsync(string username, string password) 
    { 
     var userStore = new TestUserStore(); 
     ApplicationUser user = await userStore.FindByNameAsync(username, password); 
     return await Task.FromResult(user); 
    } 
} 

これはcookiを送信するにもかかわらず、私は別のAPIコントローラを呼び出すたびに、私はリクエストが不正であることを知っています。私はアイデンティティ・フレームワークに非常に精通していないので、何が起こっているのか分かりません。

+0

スタートアップ認証コードを含めることはできますか? – john

+0

「apiメソッド」とは、ApiControllerを意味しますか? –

+0

@john identityconfigコードは私のstartup.authコードです –

答えて

2

オリジナルコードに2つのエラーがありました。

1.)デフォルトの認証タイプに一貫性がありませんでした。これは、と矛盾した「ベアラ」に認証タイプを設定した

config.SuppressDefaultHostAuthentication(); 
    config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); 

:彼らは、Web APIの設定では)

2.にすべてなってApplicationCookie

を持っている必要があり、私は次の行をコメントアウトしなければなりませんでした私のアプリケーションのクッキー認証のアプローチと私は遭遇した問題を引き起こします。

関連する問題