Asp.net core 如何在ASP.NET核心身份中结合外部登录和双因素身份验证?
我正在为一个使用ASP.NET Core 3.1构建的简单web应用程序实现身份验证和授权。到目前为止,ASP.NET Core Identity满足以下要求:外部登录的默认实现(在本例中为Google)似乎与双因素身份验证的默认实现不兼容 当我使用本地帐户(配置了2FA)登录时,系统会提示我输入TOTP令牌。当我使用Google帐户登录时,没有提示输入第二个因素。我花了几天时间研究这个(例如docs.microsoft.com、Google等等),但没有发现任何有用的东西。如何获取ASP.NET核心身份,以便对使用Google登录的用户使用双因素身份验证?先决条件:Asp.net core 如何在ASP.NET核心身份中结合外部登录和双因素身份验证?,asp.net-core,asp.net-core-identity,two-factor-authentication,asp.net-core-3.1,Asp.net Core,Asp.net Core Identity,Two Factor Authentication,Asp.net Core 3.1,我正在为一个使用ASP.NET Core 3.1构建的简单web应用程序实现身份验证和授权。到目前为止,ASP.NET Core Identity满足以下要求:外部登录的默认实现(在本例中为Google)似乎与双因素身份验证的默认实现不兼容 当我使用本地帐户(配置了2FA)登录时,系统会提示我输入TOTP令牌。当我使用Google帐户登录时,没有提示输入第二个因素。我花了几天时间研究这个(例如docs.microsoft.com、Google等等),但没有发现任何有用的东西。如何获取ASP.NE
- 使用ASP.NET核心标识的ASP.NET核心项目,其中一个或多个外部登录提供程序已配置并正在运行,例如Google
OnGetCallbackAsync
方法\u signInManager.externalLoginIgnnAsync()
的调用,并将bypassTwoFactor
参数从true更改为false if (result.RequiresTwoFactor)
{
return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = false });
}
// Sign in the user with this external login provider if the user already has a login.
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor : false);
if (result.Succeeded)
{
_logger.LogInformation("{Name} logged in with {LoginProvider} provider.", info.Principal.Identity.Name, info.LoginProvider);
return LocalRedirect(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = false });
}
if (result.IsLockedOut)
{
return RedirectToPage("./Lockout");
}
else
{
// existing code omitted for brevity
}
注意:由于我找不到任何关于如何做到这一点的文档或示例,我承认我的实现可能不是最优的。如果你知道更好的方法,请分享