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

在API本地部署Identity时遇ISigningCredentialStore未注册错误

问题解决:ISigningCredentialStore 未注册异常

错误原因

你调用AddIdentityServerJwt()启用了基于IdentityServer的JWT认证,但未注册IdentityServer所需的核心服务(尤其是签名凭据存储服务ISigningCredentialStore),导致认证流程无法获取验证JWT所需的签名密钥。

解决方案

根据你的需求,有两种修复方式:

方式1:改用普通JWT Bearer认证(无需IdentityServer)

如果你的API不需要依赖IdentityServer,仅需基础JWT认证,替换AddIdentityServerJwt()为标准JWT Bearer配置:

修改program.cs中的认证配置部分:

// 移除原有的 AddIdentityServerJwt()
// builder.Services.AddAuthentication().AddIdentityServerJwt();

// 替换为标准JWT Bearer认证
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        var jwtSettings = builder.Configuration.GetSection("JWT").Get<JwtOptions>();
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = jwtSettings.Issuer,
            ValidAudience = jwtSettings.Audience,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.Key))
        };
    });

确保你的appsettings.json中有对应的JWT配置项:

"JWT": {
  "Key": "your_strong_secret_key_here",
  "Issuer": "your_api_issuer",
  "Audience": "your_api_audience",
  "ExpiryMinutes": 60
}

方式2:配置完整IdentityServer服务(如需IdentityServer集成)

如果必须使用IdentityServer相关的JWT认证,需要添加IdentityServer核心服务并配置签名凭据:

修改program.cs的服务注册部分:

// 保留原有的 AddIdentityServerJwt()
builder.Services.AddAuthentication()
    .AddIdentityServerJwt();

// 添加IdentityServer核心服务并配置签名凭据
builder.Services.AddIdentityServer()
    .AddInMemoryClients(new List<Client>()) // 根据业务需求配置客户端
    .AddInMemoryIdentityResources(new List<IdentityResource>()) // 配置身份资源
    .AddInMemoryApiResources(new List<ApiResource>()) // 配置API资源
    .AddInMemoryApiScopes(new List<ApiScope>()) // 配置API范围
    .AddAspNetIdentity<IdentityUser>()
    // 开发环境使用临时签名凭据,生产环境需替换为正式证书
    .AddDeveloperSigningCredential();

注意:AddDeveloperSigningCredential()仅适用于开发环境,生产环境需要使用持久化的证书(如通过AddSigningCredential()加载证书文件或密钥)。

额外注意事项

  • 确保UseAuthentication()和UseAuthorization()的调用顺序正确(先执行认证,再执行授权)。
  • 检查ApplicationDbContext是否正确继承IdentityDbContext<IdentityUser>。

内容的提问来源于stack exchange,提问作者Code Ratchet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:35:30