我目前正在研究 ASP.NET Core 中的身份验证机制,并遇到了 SecurityStamp 功能,该功能也来自 ASP.NET Standard。根据我从此处的答案中了解到的情况,添加此功能是为了在帐户配置(例如密码)中修改某些内容时从所有活动会话中注销。
当密码被泄露并且攻击者的会话应该失效时,这可能很有用。但是,如果这是目的,为什么验证间隔的默认值设置为 30 分钟?这样的设置使整个机制最多延迟 30 分钟。这不应该是一个较小的值(比如说 1 分钟)以使其更有效吗?
我目前正在研究 ASP.NET Core 中的身份验证机制,并遇到了 SecurityStamp 功能,该功能也来自 ASP.NET Standard。根据我从此处的答案中了解到的情况,添加此功能是为了在帐户配置(例如密码)中修改某些内容时从所有活动会话中注销。
当密码被泄露并且攻击者的会话应该失效时,这可能很有用。但是,如果这是目的,为什么验证间隔的默认值设置为 30 分钟?这样的设置使整个机制最多延迟 30 分钟。这不应该是一个较小的值(比如说 1 分钟)以使其更有效吗?
这是为了提高更大规模应用程序的性能。
每个 SecurityStamp 验证都需要一个数据库命中。将验证间隔设置为零,这将导致每个请求的数据库命中。在 30 分钟时,这使滥用窗口保持在相当低的水平,同时大大减少了所需的查询数量。
作为一个工作示例,一个具有 10,000 个并发用户的系统,每个用户每分钟仅发出 5 个请求,当间隔为零时,每分钟需要 50,000 次验证命中。将该间隔更改为 1 分钟可将其减少到每分钟 10,000 次点击。将间隔保留为默认值 30 分钟会将速率降低到每分钟仅 333 个查询,这不太可能成为任何规模的任何应用程序中性能问题的原因,因此它是默认值。您可以想象,在 Ajax 繁重的设计中,每次页面加载 10 到 20 个 Web 调用和一些持续的重复查询的较短验证间隔可能会导致大规模问题。
如果您不希望有大量用户,您可以将此时间间隔调整到一分钟左右。