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

C#离线无法访问AuthServer时实例化OpenIdConnectConfiguration无signingKeys问题

问题根因

OpenIdConnectConfiguration.Create()方法仅解析传入的OIDC发现接口JSON的原生字段,不会自动拉取jwks_uri对应的公钥集合,你仅持久化了.well-known/openid-configuration的返回内容,没有同步存储JWKS公钥数据,所以SigningKeys属性为空,属于预期行为,和你的实现思路无关。

完整实现方案

第一步:首次拉取时持久化两份数据

访问授权服务器获取配置时,需要同时存储两类公开数据:

  • .well-known/openid-configuration返回的完整JSON
  • 上述JSON中jwks_uri字段对应接口返回的JWKS公钥集合JSON
    可以根据业务场景存储到本地文件、分布式缓存或者数据库中。

第二步:本地初始化配置的代码实现

using Microsoft.IdentityModel.Protocols.OpenIdConnect;
using Microsoft.IdentityModel.Tokens;
using System.IO;

// 读取本地持久化的两份数据
string oidcConfigContent = File.ReadAllText("local-oidc-config.json");
string jwksContent = File.ReadAllText("local-jwks.json");

// 初始化基础OIDC配置
var openIdConfig = OpenIdConnectConfiguration.Create(oidcConfigContent);

// 手动注入签名公钥
var jwks = new JsonWebKeySet(jwksContent);
foreach (var signingKey in jwks.GetSigningKeys())
{
    openIdConfig.SigningKeys.Add(signingKey);
}

第三步:定期更新本地存储

按照你预设的校验周期,定期从授权服务器拉取最新的OIDC配置和JWKS覆盖本地存储即可,兼容公钥轮换的场景。

场景适配说明
  • 前端持有有效刷新令牌的验签场景:用上述生成的openIdConfig直接做JWT验签,无需访问授权服务器
  • 后端服务重启场景:启动时直接读取本地文件初始化配置,不依赖授权服务器的可用性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:15:00