ASP.NET身份两个因素不起作用 - Cookie问题?

ASX*_*ASX 9 .net two-factor-authentication asp.net-mvc-5 asp.net-identity

背景:

我一直使用Identity-Sample由微软团队提供的项目在这里:

我已将Identity-Sample项目和预发布nuget包集成到现有项目中,该项目之前使用的是最新的稳定版Identity.

问题:

在尝试2FA时,在Account/SendCode方法内部,有一个调用GetVerifiedUserIdAsync() ,它是Microsoft.AspNet.Identity.Owin.SignInManager 类的一部分.(见这里完整代码)

GetVerifiedUserIdAsync()返回null(即它找不到经过验证的用户,即使我已经使用1个因子登录.)我相信它找不到正确的cookie.

当我运行Identity-Sample应用程序时,我的浏览器显示_RequestVerificationTokenAND TwoFactorCookie和一切正常.

当我运行自己的应用程序时,我的浏览器只显示_RequestVerificationTokencookie和我得到的null.

问题:(如果cookie是问题)

如何在SignInManager.PasswordSignInAsync(...)调用方法(内部Account/Login)时让我的应用程序正确设置cookie ?

Suh*_*shi 15

在Startup.Auth类中注册cookie

app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));
Run Code Online (Sandbox Code Playgroud)

在"登录页面"发布操作中,如果使用新的SigninManager.PasswordSigninAsync,如果用户启用了2 FA,则会设置间歇性cookie,并返回SignInStatus.RequiresVerification.然后,您可以使用SigninManager.GetVerifiedUserAsync应返回用户ID

  • 我遇到了这个问题,这是因为我在与设置 cookie 之前的用户名/密码 POST 相同的请求中调用 SignInManager.GetVerifiedUserIdAsync()。如果此时您需要 UserId,您可以使用 _userManager.FindByEmailAsync() 并传入用户名,然后使用响应来获取用户的 Id。 (2认同)