ASP.NET 标识中的哪些代码设置用户的安全标记?



安全戳是根据用户的用户名和密码生成的随机值。

在一系列方法调用之后,我将安全戳的起源追溯到Microsoft.AspNet.Identity.EntityFramework.IdentityUser<TKey, TLogin, TRole, TClaim>类的SecurityStamp属性。

但是,我找不到设置此值的代码。我发现这个属性只有一个设置器,那就是提供核心存储(IUserStore<..>, IRoleStore<...>等)的EntityFramework层。

// From Microsoft.AspNet.Identity.EntityFramework.UserStore<...>
public virtual Task SetSecurityStampAsync(TUser user, string stamp)
{
    this.ThrowIfDisposed();
    if (user == null)
    {
        throw new ArgumentNullException("user");
    }
    user.SecurityStamp = stamp;
    return Task.FromResult<int>(0);
}

然而,我发现没有代码调用到SetSecurityStampAsync方法。

当用户的凭据被更改或创建新用户时,这显然会被重置。

什么代码设置这个值?

Microsoft.AspNet.Identity.Core默认UserManager大量使用此方法。

它使用内部方法UpdateSecurityStampInternal和公共方法UpdateSecurityStampAsync来调用它。

以下方法调用内部方法:
  • CreateAsync
  • RemovePasswordAsync
  • UpdatePassword
  • RemoveLoginAsync
  • SetEmailAsync
  • SetPhoneNumberAsync
  • ChangePhoneNumberAsync
  • SetTwoFactorEnabledAsync

您应该能够使用symbolsource获取用户管理器的源代码。

相关内容

  • 没有找到相关文章

最新更新