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

.Net6环境下同一主机部署Identity Server与API后,携带令牌请求出现IDX20803错误的解决方法咨询

这个IDX20803错误我碰到过好多次了,本质就是你的API没法正确拉取Identity Server的配置元数据。结合你用IP部署在同一台机器的场景,咱们一步步排查解决:

解决IDX20803错误的具体步骤

1. 先确认API的Authority配置是否准确

你的API项目里,配置JWT验证时的Authority参数必须严格指向Identity Server的IP地址+端口,不能再用localhost了。举个例子,如果你的Identity Server发布在http://192.168.1.100:5000,那API的配置应该是这样:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "http://192.168.1.100:5000"; // 这里一定要是可访问的IP+端口
        options.Audience = "your-api-resource-name"; // 替换成你的API资源名称
        // 如果用的是HTTP而非HTTPS,必须加上这行,否则会拒绝请求元数据
        options.RequireHttpsMetadata = false;
    });

注意:生产环境一定要用HTTPS,这里只是开发环境的临时解决方案。

2. 验证Identity Server的元数据端点是否能正常访问

直接在浏览器或者Postman里访问 http://<你的IdentityServerIP>:<端口>/.well-known/openid-configuration,看看能不能返回JSON格式的配置数据:

  • 如果访问失败,说明Identity Server的发布配置有问题:检查它的Kestrel绑定是否允许所有IP访问,而不是只绑定localhost。比如在Program.cs里添加这段配置:
var builder = WebApplication.CreateBuilder(args);
// 让Kestrel监听所有IP的指定端口
builder.WebHost.ConfigureKestrel(options =>
{
    options.ListenAnyIP(5000); // 替换成你的Identity Server端口
});
  • 同时检查Windows防火墙或者杀毒软件有没有拦截这个端口,临时关闭防火墙试试能不能访问,要是能的话就给这个端口添加放行规则。

3. 核对令牌的Issuer与API的Authority是否一致

有时候你获取的令牌里,iss声明还是localhost,但API配置的是IP,这也会导致验证失败。你可以用JWT解码工具(比如本地命令行工具或离线解码网站)看看令牌里的iss字段值,必须和API的Authority完全一致。如果不一致,修改Identity Server的配置:

builder.Services.AddIdentityServer(options =>
{
    options.IssuerUri = "http://192.168.1.100:5000"; // 和API的Authority保持完全一致
})
.AddInMemoryClients(Config.Clients)
.AddInMemoryApiResources(Config.ApiResources);

4. 测试API进程是否能访问Identity Server

有时候浏览器能访问,但API进程因为权限或代理问题没法连接。你可以在API里加一段测试代码,直接请求元数据端点:

var httpClient = new HttpClient();
try
{
    var metadata = await httpClient.GetStringAsync("http://192.168.1.100:5000/.well-known/openid-configuration");
    Console.WriteLine("元数据获取成功:" + metadata.Substring(0, 100));
}
catch (Exception ex)
{
    Console.WriteLine("请求失败:" + ex.Message);
}

如果这段代码报错,说明API进程的网络访问有问题:比如用IIS发布的话,检查应用池身份有没有网络访问权限;或者有没有系统代理拦截了请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 12:59:08