本地IdentityServer签发JWT缺失端口号致Issuer验证失败
检查请求Host头差异
浏览器调用发现端点时会自动携带完整的Host: localhost:44310头,但Postman可能因代理设置或默认配置未发送正确Host头。手动在Postman请求头中添加Host: localhost:44310后重新调用发现端点,若返回的issuer恢复正常,说明是请求头缺失导致的问题,需检查Postman的全局代理设置或确保请求时发送正确Host头。验证服务器转发头配置
IdentityServer依赖请求的主机信息生成issuer,若使用IIS、IIS Express或反向代理,需确保转发头中间件配置正确。在Program.cs(或Startup.cs)中确认已添加转发头处理:app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto });同时检查
launchSettings.json中的applicationUrl是否仍为https://localhost:44310,避免配置被意外修改。排查IdentityServer的IssuerUri配置
确认Startup.cs中IdentityServer的配置未硬编码错误的issuer地址:services.AddIdentityServer(options => { // 若此处设置了IssuerUri,检查是否包含正确端口 // options.IssuerUri = "https://localhost:44310"; })Duende IdentityServer和IdentityServer4均建议不硬编码IssuerUri,让框架自动从请求推导,除非有特殊场景需求。
检查IIS Express绑定配置
若使用IIS Express,打开.vs/config/applicationhost.config文件,确认站点的HTTPS绑定端口为44310:<bindings> <binding protocol="https" bindingInformation="*:44310:localhost" /> </bindings>该配置文件可能被IDE自动修改或共享配置时出现偏差,需确保绑定信息正确。
排查系统代理与防火墙设置
近期若修改过系统代理、防火墙规则,可能导致请求的Host头被篡改或请求被转发至错误端口。尝试关闭系统全局代理,重启IdentityServer服务后重新测试。清理缓存并重启服务
执行ipconfig /flushdns清理本地DNS缓存,重启IDE和IdentityServer服务,排除临时缓存异常导致的解析问题。
由于另一台配置相同的VM可正常运行,问题大概率出在本地环境的配置变化,而非代码逻辑,重点排查上述环境相关因素即可。
内容的提问来源于stack exchange,提问作者Mathieu

