【问题标题】:JWKS changes after IIS restartIIS 重新启动后 JWKS 更改
【发布时间】:2026-02-15 22:55:01
【问题描述】:

我们正在使用 OpenIddict,我们添加了加密证书和签名证书。我们遇到的问题是,当 IIS 重新启动 /well-known/jwks 上的密钥更改时,其他项目如果没有再次重新启动,则 jwks 密钥错误,然后抛出 401 未授权。服务器重启时可以在/.well-known/jwks中使用固定键吗?

【问题讨论】:

    标签: iis openid openiddict


    【解决方案1】:

    如何添加签名证书?它存储在 IIS 之外的什么位置?

    如果您使用 AddSigningCredential(...) 并确保签名证书相同,则 JWKS 密钥不应更改。

    【讨论】:

    • 我们正在使用options.AddSigningCertificate,它是一个自签名证书,就像openiddict文档说的那样。我们将导出的证书存储为 xml 文件并使用 DPAP(Windows 数据保护 api)将其加密保存以读取证书我们解密证书并将私钥导入 X509Certificate2。用于签名和加密证书
    • 你确定你没有在某处使用 AddDeveloperSigningCredential 吗?另外,请比较磁盘上的签名密钥/证书的详细信息和 JWKS 中的详细信息,您确定您在 JWKS 中获得的实际上与磁盘上的相同吗?
    • 是的,确定我没有使用 AddDeveloperSigningCredential 我们正在使用 options.AddSigningCertificate 在本地机器上工作正常,如果我像字节数组一样保存它,但是对于生产服务器不工作但这是我的另一个问题认为
    • 读取此证书的问题是在目标机器上创建的,它没有被目标机器读取。它说:WindowsCryptographicException:指定的网络密码不正确。我添加了这个: new X509Certificate2(unProtectedData,"", X509KeyStorageFlags.MachineKeySet);但不会改变同样的错误
    • 也许在生成时设置了密码,在读取时使用相同的密码?但是“指定的网络密码”错误可能是文件系统错误?您的证书在网络驱动器上吗?而不是本地磁盘?
    【解决方案2】:

    解决了问题 1 - 像字节数组一样导出证书 2 - 使用 DPAPI 加密字节数组 3 - 将加密的字节数组保存到文件中 然后证书可以恢复正常,重启后jwks不会改变

    【讨论】:

      最近更新 更多