identityserver4 - Identity Server 4 启动后使用新的签名密钥
问题描述
我在 aspnetcore API 服务(作为无状态服务在 Service Fabric 中运行)中设置了 IdentityServer4,该服务使用生成并保存在 Azure Key Vault 中的签名证书。在 Startup 类中,我使用该AddSigningCredential
方法设置初始签名证书,但我不确定在初始签名证书过期时使用新签名证书所需的步骤。
我已将 Key Vault 配置为在前一个证书过期之前生成一个新证书,并在我的服务中运行一个后台进程,以定期从 Key Vault 检索证书并检查它是否与 IdentityServer 当前使用的证书不同。
我不知道如何设置新证书以供 IdentityServer 使用。据我所知,我不能AddSigningCredential
再次使用该方法,因为 DI 容器不允许在启动后注册新的依赖项。此外DefaultSigningCredentialsStore
,为ISigningCredentialStore
依赖项注册的那个也不允许更新SigningCredentials
构建后的内容。
我是否必须编写自己的版本ISigningCredentialStore
并IValidationKeysStore
允许对 进行更新SigningCredentials
?看起来这将是一种常见用法,应该在产品本身中,还是我遗漏了什么?
解决方案
我想知道 IdentityServer 是否会查看它的到期时间。因为这无关紧要,因为它仅用于加密令牌。否则,您应该防止证书过期。
证书用于加密和解密令牌。这可以防止其他人篡改令牌。
如果您更改证书,那么所有现有令牌都会立即失效,因为服务器无法再解码传入的令牌。这与使用 TemporarySigningCredentials 并重新启动 IdentityServer 时的行为相同。
所以它根本不应该改变。我认为最好仅为 IdentityServer 创建一个特定的证书(可以选择永不过期)。
推荐阅读
- python - Pytorch:计算子矩阵梯度的正确方法
- python - 在colab上导入bert微调模型
- visual-studio-code - VSC 打开错误的虚拟环境
- affinity - 在系统启动时自动设置 audiogd.exe 的亲和性
- javascript - 如何在 Php/Laravel 字符串变量中转义反引号?
- node.js - 等待不适用于 Sequelize 中的 QueryInterface.insert
- python - ffmpeg OSError: [WinError 6] 转换为exe时句柄无效
- user-interface - 导航对称术语
- javascript - 如何让我的 ReactJs 应用程序在不同屏幕中显示不同的消息?
- javascript - Discord bot is not coming online