在ASP.NET标识中为数据库中的旧版用户填充SecurityStamp

时间:2014-09-21 18:01:04

标签: c# security asp.net-identity

我有一个遗留数据库,我正在使用ASP.NET身份。为了使用Identity函数,数据库中需要为每个用户提供SecurityStamp值。

有些人在与此有关的其他问题中提到,该值可以是任何随机值,EG是随机的'但这听起来不对我!?

我使用以下代码在数据库中创建了一个新用户:

IdentityResult result = await UserManager.CreateAsync(user, model.Password);

并使用以下值填充它:cea9a659-e965-4e76-8203-ed1c79491fa7

这似乎是一个更安全的'对我来说,价值比随机int更重要,特别是当它被称为SecurityStamp时,它似乎应该以相同的方式为我的数据库中的所有用户填充。

如何正确填充用户数据库的SecurityStamp值?

2 个答案:

答案 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);