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