如何验证之前在 2FA 中设置的 TwoFactorRememberBrowserCookie?使用 Microsoft.AspNet.Identity.Owin

问题描述 投票:0回答:1

我使用 ASP.Net Identity 类(ApplicationSignInManager:SignInManager)在 ASP.NET MVC 应用程序中实现了基本的 2FA。请注意,我使用的是 AspNet.Identity.OWIN,而不是 AspNetCore.Identity。

用户使用记住浏览器参数验证通过电子邮件发送的代码后,将按预期创建 cookie:

var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true }, identity);

即使注销后,cookie

.AspNet.TwoFactorRememberBrowser
仍保留在浏览器中。

现在的问题是,在第二次登录时我需要知道这个 Cookie 是否属于尝试登录的用户。如果是,则跳过 2fa,如果不应用 2fa。

我不能只检查 cookie 是否存在,因为用户可能正在使用另一个用户的相同浏览器。我已经为此苦苦挣扎了两天,请提供任何帮助,我将不胜感激。

c# asp.net owin
1个回答
0
投票

您可以使用

HttpContext.AuthenticateAsync()
方法来验证特定方案。对于你的情况:

var result = Context.AuthenticateAsync(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);

假设身份验证成功,您将获得一个包含

AuthenticateResult
ClaimsPrincipal
作为回报。这样,您可以检索数据,例如来自 cookie 的 UserId。

// Ensure the principal exists.
if (result?.Principal == null)
{
    return null;
{

var userId = result.Principal.FindFirstValue(ClaimTypes.Name);

现在将

userId
与尝试登录的用户 ID 进行比较,您就会知道是否要求 2FA。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.