JwtBearerHandler 永久缓存 OpenIdConnectConfiguration

7
JwtBearerHandler 中,OpenIdConnectConfiguration 只会被加载一次并且缓存“永久”(直到应用程序再次启动)。
如何推荐进行签名密钥轮换? 重新启动应用程序对我不起作用。

1
嗯,通常重启应该会清除缓存。我不认为它会在任何地方保留缓存。 - juunas
1个回答

9
Scheme处理程序被注册为瞬态依赖项,因此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方法。例如,如果您有一些外部信号可以通知您配置更改,您可以这样做。您可以为此提供一个API端点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接