安全戳是根据用户的用户名和密码生成的随机值。
在一系列方法调用之后,我将安全戳的起源追溯到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获取用户管理器的源代码。