【发布时间】:2020-02-28 18:04:41
【问题描述】:
使用双重身份验证应用程序登录后,我将 rememberClient 设置为 true,如下所示:
await _signInManager.TwoFactorAuthenticatorSignInAsync(code: request.Code,
isPersistent: request.IsPersistent,
rememberClient: request.RememberClient);
登录工作正常,我得到了 .AspNetCore.Identity.Application 和 Identity.TwoFactorRememberMe cookie。如果我退出并再次登录,我不需要使用双因素。只要一切都好。
问题是当我对用户进行一些更改时,例如电话号码,并且 SecurityStamp 已更改。进行更改后,我使用await _signInManager.RefreshSignInAsync(user)。但是Identity.TwoFactorRememberMe cookie 没有更新。这会导致两个问题:
- 下次登录时,我必须再次使用双因素身份验证。
- 在同一会话期间,如果我使用
await _signInManager.IsTwoFactorClientRememberedAsync(user)检查用户是否记住了浏览器,则会导致错误“无法验证安全标记”并且.AspNetCore.Identity.Application将被删除。
我尝试在更新.AspNetCore.Identity.Application cookie 的同时更新Identity.TwoFactorRememberMe cookie,如下所示:
await base.RefreshSignInAsync(user);
await RememberTwoFactorClientAsync(user);
它有效,但它也会为那些以前没有它的人设置Identity.TwoFactorRememberMe cookie。我无法检查它是否之前设置,因为然后我得到了我在上面(2)中描述的错误。
接下来我将尝试对我所做的每一个地方都做这样的事情来改变用户 SecurityStamp:
var isTwoFactorClientRemembered = await _signInManager.IsTwoFactorClientRememberedAsync(user);
// do the changes...
await _signInManager.RefreshSignInAsync(user);
if (isTwoFactorClientRememberedAsync)
await _signInManager.RememberTwoFactorClientAsync(user);
我在这里缺少什么,或者这是唯一的方法吗?
我正在使用 IdentityServer4 和 SPA 应用程序,但我认为这与问题无关。
【问题讨论】: