ASP.NET Core 3.1生产环境如何配置IdentityServer签名密钥?
错误原因
你遇到的报错核心原因是生产环境未配置IdentityServer所需的签名密钥:
InvalidOperationException: Key type not specified
开发环境下appsettings.Development.json中配置了"Type": "Development",框架会自动生成临时签名密钥满足开发调试需求,但该配置不支持在生产环境使用,因此生产环境启动时会抛出上述异常。
生产环境支持的密钥配置方式
目前官方支持3种生产环境可用的密钥配置方案:
- PFX证书文件方案
该方案通用性最强,适用于所有部署环境,配置示例如下:
"IdentityServer": { "Key": { "Type": "File", "FilePath": "你的PFX证书文件路径", "Password": "PFX证书的私钥密码" } }
使用说明:需使用包含私钥的PFX格式证书,可通过openssl自行生成商用自签证书,或使用正规CA颁发的SSL证书导出为PFX格式。
注意:生产环境不要将PFX密码明文写在配置文件中,建议通过环境变量、加密配置或密钥管理服务存储敏感信息。
- 系统证书存储方案
该方案适合Windows服务器部署场景,密钥存储在系统证书存储区,避免证书文件泄露风险,配置示例如下:
"IdentityServer": { "Key": { "Type": "Store", "StoreName": "My", "StoreLocation": "CurrentUser", "Name": "CN=你的证书主题名称" } }
使用说明:StoreName默认填My对应系统的个人证书存储区,StoreLocation可选LocalMachine(本地机器级存储)或CurrentUser(当前用户级存储),需确保部署应用的进程账号拥有读取证书私钥的权限。
- 云密钥管理服务方案
该方案适合部署在公有云的场景,以Azure Key Vault为例,配置示例如下:
"IdentityServer": { "Key": { "Type": "KeyVault", "KeyIdentifier": "你在KeyVault中创建的密钥唯一标识" } }
使用说明:无需自行管理证书文件,密钥的生命周期、加密都由云服务托管,安全性最高,需为应用进程分配对应密钥的读取权限。
生产使用注意事项
- 禁止在生产环境使用
"Type": "Development"配置,临时密钥会在应用重启后重置,导致所有已签发的令牌失效,所有用户需要重新登录。 - 密钥需要定期轮换,轮换时需保留旧密钥至少一个令牌的有效期时长,用于验证此前签发还未过期的存量令牌。
- 所有密钥相关的敏感信息必须加密存储,禁止硬编码到代码或公开的配置文件中。
内容的提问来源于stack exchange,提问作者Nicholas Bergesen
相关产品推荐
相关产品推荐

