【问题标题】:Identity Server 4 Use a new Signing Key after StartupIdentity Server 4 启动后使用新的签名密钥
【发布时间】:2018-04-25 09:56:27
【问题描述】:

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

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

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

我是否必须编写自己的ISigningCredentialStoreIValidationKeysStore 版本才能更新SigningCredentials?这似乎是一种常见用法,应该在产品本身中,还是我遗漏了什么?

【问题讨论】:

    标签: identityserver4 signing


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 你是对的,IdentityServer 仍然会使用过期证书签署令牌。但是,它会在这样做时记录一个警告。我在安全团队对这些警告或永不过期的证书不满意的环境中工作,因此我必须针对证书在某个时候需要滚动的可能性进行编码。通过实现 IValidationKeysStore,我可以将过期的证书密钥放入其中,并且仍然验证在添加新密钥之前颁发的令牌。
    猜你喜欢
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 2016-10-20
    相关资源
    最近更新 更多