更改防伪印章

Change of Security Stamp

提问人:bootsy 提问时间:7/1/2019 最后编辑:Martin Evansbootsy 更新时间:7/1/2019 访问量:1770

问:

更新用户密码时,我希望每次更新安全标记值。我相信这就是我的研究安全邮票的工作方式。

我把这段代码放在 但这不起作用:ApplicationUserManager.cs

 private static string NewSecurityStamp()
 {
     return Guid.NewGuid().ToString();
 }

每次对用户帐户进行更新时,我需要在何处更改安全标记值?

asp.net-core .net-core

评论

0赞 Marko Papic 7/2/2019
你说的“但这不起作用”是什么意思。它以什么方式不起作用?
0赞 bootsy 7/2/2019
数据库中的安全标记未更改。
0赞 Ryan 7/2/2019
你刷新了数据库吗?您是否使用 asp.net 核心脚手架标识?然后它在表中有一个列。我测试了它,它运行良好,因为安全印章是一个随机值,每当用户凭据更改(密码更改、登录名删除)时都必须更改 learn.microsoft.com/en-us/dotnet/api/...SecurityStampAspNetUser

答:

2赞 Chris Pratt 7/1/2019 #1

这就是发生的事情。但是,安全标记仅在一段时间内(默认为每 30 分钟)重新验证一次,以减少正在进行的数据库查询次数。您可以将此间隔降低到零,这样可以有效地使标记在每次请求时重新验证。但是,这将增加来回到数据库的喋喋不休。

services.Configure<SecurityStampValidatorOptions>(o =>
{
    // WARNING: this will issue a query for every request
    // You might want to rather just compromise with an interval
    // less than 30 minutes (5 minutes, 10 minutes, etc.)
    o.ValidationInterval = TimeSpan.Zero;
});

另一种选择是在进行此类更改后直接注销用户。如果目标是简单地让他们重新登录,那应该会做得更好。只需注入 ,然后调用该实例即可。之后,您需要重定向用户。这可以直接转到登录页面或受保护的站点的某些区域,这将导致它们被带到登录页面进行身份验证。无论哪种情况,都需要重定向才能实际删除身份验证 cookie。SignInManager<TUser>SignOutAsync

评论

0赞 bootsy 7/1/2019
嗨,克里斯。这在解决方案中处于什么位置?用户经理?启动?
0赞 Chris Pratt 7/1/2019
不好意思。那会进去.以为变量会传达这一点,但我应该更明确。Startup.ConfigureServicesservices
0赞 bootsy 7/2/2019
我不认为这是行得通的。它仍然没有更新数据库中的字段。我更改了用户的密码,该用户的安全戳仍为 NULL。