Identityserver4 Identity Server 4在启动后使用新的签名密钥

Identityserver4 Identity Server 4在启动后使用新的签名密钥,identityserver4,signing,Identityserver4,Signing,我在aspnetcore API服务(作为无状态服务在服务结构中运行)中设置了IdentityServer4,该服务使用Azure密钥库中生成并保存的签名证书。在Startup类中,我使用AddSigningCredential方法来设置初始签名证书,但我不确定在初始签名证书过期时使用新签名证书所需的步骤 我将密钥库配置为在前一个证书过期之前生成新证书,并在我的服务中运行后台进程,定期从密钥库检索证书,并检查它是否与IdentityServer当前使用的证书不同 我不知道如何设置新证书以供Ide

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

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

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


我是否必须编写自己版本的
ISigningCredentialStore
iValidationKeyStore
以允许对
签名凭据进行更新?这似乎是一种常见用法,应该出现在产品本身中,还是我遗漏了什么?

我想知道IdentityServer是否会查看其过期时间。因为这不重要,因为它只是用于令牌的加密。否则,应防止证书过期

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

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


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

您是对的,IdentityServer仍然会使用过期的证书对令牌进行签名。但是,执行此操作时,它会记录警告。我工作的环境中,安全团队对这些警告或拥有永不过期的证书不满意,因此我必须为证书在某个时候可能需要滚动的情况编写代码。通过实现IvalidationKeyStore,我可以将过期的证书密钥放入其中,并且仍然可以验证在添加新密钥之前颁发的令牌。