首页 > 解决方案 > Identity Server 4 启动后使用新的签名密钥

问题描述

我在 aspnetcore API 服务(作为无状态服务在 Service Fabric 中运行)中设置了 IdentityServer4,该服务使用生成并保存在 Azure Key Vault 中的签名证书。在 Startup 类中,我使用该AddSigningCredential方法设置初始签名证书,但我不确定在初始签名证书过期时使用新签名证书所需的步骤。

我已将 Key Vault 配置为在前一个证书过期之前生成一个新证书,并在我的服务中运行一个后台进程,以定期从 Key Vault 检索证书并检查它是否与 IdentityServer 当前使用的证书不同。

我不知道如何设置新证书以供 IdentityServer 使用。据我所知,我不能AddSigningCredential再次使用该方法,因为 DI 容器不允许在启动后注册新的依赖项。此外DefaultSigningCredentialsStore,为ISigningCredentialStore依赖项注册的那个也不允许更新SigningCredentials构建后的内容。

我是否必须编写自己的版本ISigningCredentialStoreIValidationKeysStore允许对 进行更新SigningCredentials?看起来这将是一种常见用法,应该在产品本身中,还是我遗漏了什么?

标签: identityserver4signing

解决方案


我想知道 IdentityServer 是否会查看它的到期时间。因为这无关紧要,因为它仅用于加密令牌。否则,您应该防止证书过期。

证书用于加密和解密令牌。这可以防止其他人篡改令牌。

如果您更改证书,那么所有现有令牌都会立即失效,因为服务器无法再解码传入的令牌。这与使用 TemporarySigningCredentials 并重新启动 IdentityServer 时的行为相同。

所以它根本不应该改变。我认为最好仅为 IdentityServer 创建一个特定的证书(可以选择永不过期)。


推荐阅读