【问题标题】:JwtBearerHandler caches OpenIdConnectConfiguration 'forever'JwtBearerHandler '永远'缓存 OpenIdConnectConfiguration
【发布时间】:2019-05-13 12:10:44
【问题描述】:

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

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

【问题讨论】:

  • 嗯,重启应该正常清除缓存。我认为它不会在任何地方持续存在..

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


【解决方案1】:

方案处理程序是registered as transient dependencies,因此JwtBearerHandler 内部的_configuration 实际上根本没有被缓存。

做什么 缓存配置的是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 端点。

【讨论】:

    猜你喜欢
    • 2021-05-15
    • 1970-01-01
    • 2021-07-09
    • 2014-06-09
    • 2011-06-27
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2013-07-23
    相关资源
    最近更新 更多