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

网关返回403状态码排查:通过Ocelot访问Catalog服务失败

问题排查与解决

1. 网关中间件顺序错误

你的网关Program.cs中缺少app.UseAuthentication();调用,且中间件顺序不符合要求。正确的中间件顺序应该是:

var app = builder.Build();

app.UseAuthentication(); // 必须添加这一行,启用认证中间件
app.UseAuthorization();
await app.UseOcelot();

app.Run();

如果没有启用认证中间件,JWT令牌无法被正确验证,会导致授权检查失败返回403。

2. 令牌缺少Ocelot路由要求的Scope

查看Ocelot配置中Catalog路由的AllowedScopes:

"AuthenticationOptions": {
    "AuthenticationProviderKey": "GatewayAuthenticationScheme",
    "AllowedScopes": ["catalog_fullpermission"]
}

这要求请求的JWT令牌中必须包含catalog_fullpermission这个scope。你需要确认:

  • 获取令牌时,是否在请求中包含了catalog_fullpermission scope(比如使用ClientCredentials模式时,请求的scope参数要包含该值)
  • 通过jwt.io解析令牌,检查scope字段是否包含catalog_fullpermission

如果令牌中没有这个scope,需要调整令牌请求,添加该scope(你的IdentityServer客户端配置已允许使用该scope,重点在请求令牌时是否指定)。

3. 验证Audience与Scope的关联

IdentityServer配置中,resource_gateway关联的Scope是gateway_fullpermission,Catalog服务对应的resource_catalog关联的Scope是catalog_fullpermission。网关JWT验证要求Audience为resource_gateway,同时Ocelot路由授权需要catalog_fullpermission scope,两者必须同时满足。

4. 调试建议

  • 在网关的appsettings.json中添加日志配置,将Microsoft.AspNetCore.Authentication和Ocelot的日志级别设为Debug,查看具体授权失败原因
  • 用Postman等工具重新获取令牌,确保请求的scope包含catalog_fullpermission和gateway_fullpermission
  • 再次解析令牌,确认aud包含resource_gateway,scope包含catalog_fullpermission

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 07:44:53