.NET 6 CoreWebApi集成FusionAuth认证报IDX20803错误如何解决
问题原因
你使用的AddMicrosoftIdentityWebApi扩展方法是微软身份平台专属组件,默认读取的配置字段为Authority而非你配置的Instance,无法正确拼接FusionAuth的OIDC元数据地址,导致身份校验服务初始化失败,抛出IDX20803错误。
修复步骤
1. 替换认证服务注册代码
将原来的认证服务注册逻辑替换为标准JwtBearer配置,适配FusionAuth的结构:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { // 本地开发关闭HTTPS校验,生产环境请删除该行 options.RequireHttpsMetadata = false; // 拼接FusionAuth的租户级签发地址 options.Authority = $"{builder.Configuration["FusionAuth:Instance"]}/{builder.Configuration["FusionAuth:TenantId"]}"; // 配置接收的受众为当前应用的ClientId options.Audience = builder.Configuration["FusionAuth:ClientId"]; options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters { ValidateIssuer = true, ValidIssuer = $"{builder.Configuration["FusionAuth:Instance"]}/{builder.Configuration["FusionAuth:TenantId"]}", ValidateAudience = true, ValidAudience = builder.Configuration["FusionAuth:ClientId"], ValidateLifetime = true }; });
2. 清理冗余配置
CallbackPath是给带前端登录的OIDC流程使用的,纯API接口项目不需要该配置,调整后配置如下即可:
"FusionAuth": { "Instance": "http://localhost:9011", "ClientId": "xx1", "ClientSecret": "xx2", "TenantId": "xx3" },
3. 确认请求凭证类型
调用接口只能使用FusionAuth返回的access_token,refresh_token是用来刷新访问凭证的,本身不能作为接口访问的身份凭证。
4. 确认中间件注册顺序
认证、授权中间件的注册顺序不能出错,必须放在路由匹配之后、接口映射之前:
app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers();
内容的提问来源于stack exchange,提问作者drkmkzs
相关产品推荐
相关产品推荐

