You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IdentityServer6自定义签名密钥存储后仍显示内置内存密钥解决方法

问题原因

默认内存密钥与自定义密钥同时出现在jwks文档中,由框架默认行为导致:

  • IdentityServer6 默认开启自动密钥管理功能,该功能会在DI容器中注册一套内置的ISigningCredentialStore和IValidationKeysStore实现,服务启动时自动生成一对内存临时签名密钥。
  • 框架加载签名密钥时,会解析容器中所有注册的密钥Store实现,将所有Store返回的密钥合并后对外暴露,因此手动注册的自定义Store和默认自动密钥管理注册的内置Store会同时生效,最终返回两组共4个密钥。
  • 如果代码中显式调用了AddDeveloperSigningCredential()、AddTemporarySigningCredential()这类临时密钥扩展方法,也会额外注入独立的内存密钥源,进一步导致密钥冗余。
解决方法

按照以下步骤配置即可完全禁用默认密钥,仅保留自定义加载的密钥:

  1. 清理冗余的临时密钥注册代码
    检查IdentityServer服务注册逻辑,删除所有AddDeveloperSigningCredential()、AddTemporarySigningCredential()方法调用,这类方法显式注入的内存密钥不会被后续自定义Store覆盖。
  2. 关闭框架默认自动密钥管理
    在AddIdentityServer的配置委托中,将自动密钥管理开关设为关闭状态,阻止框架注册内置的密钥Store实现、自动生成临时内存密钥,示例代码如下:
    builder.Services.AddIdentityServer(options =>
    {
        // 禁用默认自动密钥生成与管理逻辑
        options.KeyManagement.Enabled = false;
        // 其余原有IdentityServer配置(如客户端、资源配置等)保持不变
    })
    // 保留原有的其他IdentityServer配置逻辑
    ;
    
  3. 保留原有自定义密钥Store的注册代码即可,无需修改:
    builder.Services.AddSingleton<ISigningCredentialStore, MySigningCredentialStore>();
    builder.Services.AddSingleton<IValidationKeysStore, MyValidationKeysStore>();
    
验证方式

重启应用后重新访问jwks发现文档,此时文档中将仅返回自定义Store加载的密钥,默认生成的内存密钥会被完全移除,密钥总数与自定义加载的密钥数量一致。

注意:生产环境使用自定义密钥管理时,需保证自定义加载的密钥符合所选签名算法的安全要求,私钥需做好安全存储避免泄露。

内容的提问来源于stack exchange,提问作者Tom Troughton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:06:24