.NET7 基于Identity Server的独立身份认证应用运行异常
Identity Server + ASP.NET Core 7 证书配置完整指南(附错误修复)
先解决眼前的两个错误
1. Newtonsoft.Json.JsonReaderException:解析数字时遇到意外字符
这百分百是appsettings.json的语法错误,直接排查:
- 所有字符串类型的配置(比如证书路径、密码)必须用双引号括起来,不能用单引号或漏写引号
- 删除配置项末尾多余的逗号(比如最后一个键值对后面不能加逗号)
- 数字类型配置(如端口号)别加引号,字符串类型必须加,别搞混
- 用IDE的JSON语法检查(比如VS里的红色波浪线)快速定位错误位置
2. System.NullReferenceException
本质是Identity Server找不到签名证书,导致核心服务初始化失败,连锁抛出空引用异常。问题根源是证书未成功加载,完整配置流程可彻底避免此问题。
正确的证书配置全流程
1. 生成合规的自签名证书
用PowerShell生成带可导出私钥的证书,命令如下:
# 生成绑定域名的证书,有效期10年,允许导出私钥 New-SelfSignedCertificate -DnsName "your-domain.com" -CertStoreLocation "Cert:\CurrentUser\My" -NotAfter (Get-Date).AddYears(10) -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 # 替换<Thumbprint>为证书指纹(运行Get-ChildItem Cert:\CurrentUser\My可查看) $cert = Get-ChildItem -Path Cert:\CurrentUser\My\<Thumbprint> # 导出为PFX文件并设置密码(务必记好,后续配置要用) Export-PfxCertificate -Cert $cert -FilePath "identityserver-cert.pfx" -Password (ConvertTo-SecureString "your-strong-password" -AsPlainText -Force)
2. 将证书加入项目
- 把生成的
identityserver-cert.pfx拖到项目根目录 - 在Visual Studio中选中该文件,右键设置属性:
- 复制到输出目录:选择始终复制
- 生成操作:选择内容
3. 配置appsettings.json(关键!别写错)
严格按照以下格式配置,确保JSON语法完全合法:
"IdentityServer": { "Clients": [ // 你的客户端配置(如有) ], "Key": { "Type": "File", "FilePath": "identityserver-cert.pfx", "Password": "your-strong-password" } }
- FilePath可使用相对路径(相对于发布后的运行目录)或绝对路径(Windows用
C:\apps\cert.pfx,Linux用/var/apps/cert.pfx) - 密码必须与导出PFX时设置的一致,大小写敏感
4. 部署到第三方主机的额外注意事项
- 确认主机安装的是ASP.NET Core 7 Runtime,而非仅.NET 7控制台运行时,缺少ASP.NET Core组件会引发各类异常
- 给应用运行账号添加PFX文件的读取权限,尤其是Linux主机,避免权限不足导致证书加载失败
- 若主机支持,可将证书安装到系统证书存储,用域名加载更稳定:
"IdentityServer": { "Key": { "Type": "Store", "StoreName": "My", "StoreLocation": "LocalMachine", "Name": "CN=your-domain.com" } }
额外排查技巧
若仍有问题,开启详细日志定位根源:
在appsettings.json中添加以下配置,重启应用后查看日志,证书加载失败的具体原因会被明确记录:
"Logging": { "LogLevel": { "Default": "Debug", "Microsoft.AspNetCore": "Debug", "Duende.IdentityServer": "Debug" } }
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

