You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core的AddJwtBearer如何订阅OIDC提供商的证书变更

OIDC 提供商证书变更时 .NET Core JWT 校验的适配方案

首先需要纠正一个常见误区:AddJwtBearer 并不是仅会拉取一次 OIDC 元数据和签名密钥,框架本身已经内置了证书变更的适配机制,不需要额外做主动的变更订阅,常规场景下通过调整内置配置即可覆盖需求:

  • 开启/调整自动刷新策略
    你可以直接在 AddJwtBearer 的配置参数中调整两个核心配置项:
    • AutomaticRefreshInterval:元数据定期刷新的时间间隔,默认值为 24 小时,你可以根据业务对证书变更的容忍度调低该值,例如设置为 1~2 小时,单位为 TimeSpan
    • RefreshOnIssuerKeyNotFound:该参数默认值为 true,当收到的 JWT 用本地缓存的密钥校验失败、且触发「密钥不存在」的报错时,框架会立即主动拉取一次最新的 OIDC 元数据和签名密钥,再重新进行一次签名校验,这个机制可以覆盖绝大多数突然的证书轮转场景,不会导致合法的新签名令牌校验失败。

配置示例代码如下:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "你的OIDC服务提供商地址";
        options.Audience = "当前API的受众标识";
        // 调整定期刷新间隔为1小时
        options.AutomaticRefreshInterval = TimeSpan.FromHours(1);
        // 确保校验失败时触发立即刷新
        options.RefreshOnIssuerKeyNotFound = true;
    });
  • 自定义变更通知逻辑(可选)
    如果你需要在签名密钥发生变更时执行额外的自定义逻辑(例如上报告警、记录审计日志等),可以自己实现 IConfigurationManager<OpenIdConnectConfiguration> 接口,或者继承框架默认的 ConfigurationManager<OpenIdConnectConfiguration> 类,在配置更新的逻辑中插入自己的业务代码,再替换掉 JwtBearerOptions 中的默认 ConfigurationManager 实例即可。

注意:不要为了追求极致的实时性将刷新间隔设置得过短(例如小于5分钟),会给OIDC服务商带来不必要的请求压力,也会增加自身服务的校验耗时。绝大多数公有云OIDC服务的证书轮转都会预留新旧密钥共存的窗口期,默认的刷新策略已经足够平滑适配变更。


内容的提问来源于stack exchange,提问作者manura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:06:04