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

本文关键字:用户 填充 SecurityStamp ASP NET Identity 数据库 | 更新日期: 2023-09-27 18:23:44

我有一个用于ASP.NET Identity的遗留数据库。为了使用Identity函数,数据库中每个用户都需要一个SecurityStamp值。

一些人在与此相关的其他问题中提到,该值可以是"任何随机值,例如随机int",但这听起来不对!?

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

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

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

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

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

在ASP.NET Identity中为数据库中的旧用户填充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);