在JwtBearerHandler中,OpenIdConnectConfiguration
仅加载一次并“永久”缓存(直到应用程序再次启动)。
推荐的签名轮换方式是什么?重新启动应用程序对我不起作用。
答案 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端点。