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

IIS重启后/.well-known/jwks密钥变动致401,如何配置固定JWKS密钥?

OpenIddict 固定JWKS返回结果配置方案

完全可以通过显式配置持久化证书的方式实现服务重启后/.well-known/jwks返回内容固定不变,你遇到的重启后密钥变更问题,本质是默认配置下OpenIddict如果没有检测到显式指定的持久化证书,会在服务启动时自动生成临时的签名/加密密钥。

具体配置步骤如下:

  • 优先准备正式的X.509证书(不要使用开发环境自带的临时开发证书),将证书导入到IIS服务器的「本地计算机\个人」证书存储区,右键证书选择「所有任务-管理私钥」,添加站点对应的IIS应用程序池用户,授予「读取」权限。
  • 调整OpenIddict服务注册代码,移除AddDevelopmentEncryptionCertificate、AddDevelopmentSigningCertificate这类生成临时证书的方法,显式加载指定的持久化证书:
builder.Services.AddOpenIddict()
    .AddServer(options =>
    {
        // 加载本地证书存储中的签名证书
        options.AddSigningCertificate(
            storeName: StoreName.My,
            storeLocation: StoreLocation.LocalMachine,
            thumbprint: "你的证书SHA1指纹值"
        );
        // 加载本地证书存储中的加密证书
        options.AddEncryptionCertificate(
            storeName: StoreName.My,
            storeLocation: StoreLocation.LocalMachine,
            thumbprint: "你的证书SHA1指纹值"
        );
        
        // 其余原有配置保持不变
        options.SetAuthorizationEndpointUris("connect/authorize")
               .SetTokenEndpointUris("connect/token")
               .SetJWKSURIPath("/.well-known/jwks");
    });
  • 如果不方便将证书导入服务器存储,也可以直接读取物理PFX证书文件,注意将证书放到站点根目录外的安全路径,避免被外部用户下载:
// 加载物理证书文件,第二个参数为证书的访问密码
var signingCert = new X509Certificate2("D:\\cert\\signing.pfx", "你的证书密码");
var encryptionCert = new X509Certificate2("D:\\cert\\encryption.pfx", "你的证书密码");

builder.Services.AddOpenIddict()
    .AddServer(options =>
    {
        options.AddSigningCertificate(signingCert);
        options.AddEncryptionCertificate(encryptionCert);
        
        // 其余原有配置保持不变
    });
  • 配置完成后重启IIS站点,多次重启后访问/.well-known/jwks验证返回的密钥集合是否完全一致即可。

提示:如果此前已经使用临时证书签发过有效令牌,更换固定证书后旧令牌会全部失效,建议提前配置密钥滚动策略,同时保留旧证书作为验证密钥一段时间,避免依赖方业务受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:54:03