security - JwtBearerHandler 缓存 OpenIdConnectConfiguration 'forever'

标签 security asp.net-core jwt openid-connect

JwtBearerHandler OpenIdConnectConfiguration仅加载一次并“永久”缓存(直到应用程序再次启动)。

进行签名 key 轮换的推荐方法是什么?重新启动应用程序对我不起作用。

最佳答案

方案处理程序是 registered as transient dependencies所以_configuration JwtBearerHandler 内部实际上根本没有缓存。
缓存配置的是 IConfigurationManager<OpenIdConnectConfiguration> 用于从权威机构检索配置。该配置管理器是 Microsoft.IdentityModel.Protocols.ConfigurationManager<> 它确实有一个内部刷新机制,使它每隔一段时间重新获取配置。
默认情况下,自动刷新间隔设置为一天,因此配置管理器将每天获取一次配置。您可以修改它,以便更频繁地刷新。
为此,您可以调整 AutomaticRefreshInterval配置管理器的属性。为避免必须自己创建配置管理器,您可以添加配置后操作以在创建配置管理器后对其进行调整。像这样的东西应该工作:

services.PostConfigure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options =>
{
    if (options.ConfigurationManager is ConfigurationManager<OpenIdConnectConfiguration> manager)
    {
        manager.AutomaticRefreshInterval = TimeSpan.FromHours(6);
    }
});
如果您在配置身份验证方案后添加它,则配置后操作应在默认配置后操作之后运行,您应该能够重新配置配置管理器。
当然,您也可以随时显式调用 RequestRefresh method在配置管理器上。例如,如果您有一些可以通知您配置更改的外部信号,您可以这样做。比如说,您可以为此提供一个 API 端点。

关于security - JwtBearerHandler 缓存 OpenIdConnectConfiguration 'forever',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53742164/

相关文章:

java - session 劫持: Pros/Cons of a filter that suppresses Session IDs

security - 如果参数 echo'd 从 GET 更改为 POST,可以使用哪些方法来利用 XSS?

security - 数字签名与 HMAC 与通过 DH 的 key

git - 使用基于 xproj 的 ASP.NET Core 项目时,Azure 构建停止工作

firebase - 无法使用 Firebase jwt token 访问 hasura

xamarin - 当我使用 "ValidateAntiForgeryToken"和 "Authorize"时收到 400 错误请求

php - 过滤、存储到数据库并输出文本区域的文本? Zend 框架 2.3.5

c# - 使用 C# 过滤 MongoDB 日期范围之间的数据

c# - 在 C# 和 ASP.NET Core 中单击另一个按钮时如何隐藏按钮并显示它们?

angular - 从 Angular 2 调用 Laravel 后端 api