JwtBearerHandler永久缓存OpenIdConnectConfiguration

时间:2018-12-12 11:34:27

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

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

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

1 个答案:

答案 0 :(得分:2)

方案处理程序为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端点。