我有一个用于ASP.NET Identity的遗留数据库。为了使用Identity函数,数据库中每个用户都需要一个SecurityStamp值。
一些人在与此相关的其他问题中提到,该值可以是"任何随机值,例如随机int",但这听起来不对!?
我使用以下代码在数据库中创建了一个新用户:
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
并用以下值填充:cea9a659-e965-4e76-8203-ed1c79491fa7
对我来说,这似乎是一个比随机int
更"安全"的值,尤其是当它被称为SecurityStamp
时,它似乎应该以相同的方式为我数据库中的所有用户填充。
如何正确填充用户数据库的SecurityStamp
值?
安全戳默认为GUID,我没有看到任何修改它的方法。因此,如果您想为所有现有用户填充该值,只需运行sql:
update AspNetUsers
set SecurityStamp = NEWID()
where SecurityStamp is null
因此,安全戳可以是你喜欢的任何字符串,它只是用作比较点,所以你可以自由地将所有这些设置为你最初想要的任何值(即使是一个常量空字符串也可以),默认情况下,UserManger会在这些方法期间自动为戳生成一个新的guid:
Create
RemovePassword
ChangePassword
AddPassword
RemoveLogin
SetEmail
SetPhoneNumber
ChangePhoneNumber
SetTwoFactorEnabled
而且您总是可以直接调用UpdateSecurityStamp。
最后,如果您使用Identity.EF实现,您也可以直接设置字段:
user.SecurityStamp = generateAString();
await userManager.UpdateAsyc(user);