在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
相关产品推荐
相关产品推荐

