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

ASP.NET Core 6 MVC中Ocelot网关未转发Authorization Header至API路由

Ocelot网关剥离Authorization Header的原因及解决办法

核心原因

Ocelot默认不会自动转发Authorization这类认证相关请求头部,它内置了一套头部过滤规则,仅会转发部分标准HTTP头部,Authorization不在默认允许转发的列表中,因此会被自动剥离。

如果手动添加该头部后仍被剥离,大概率是因为Ocelot的路由配置里未明确声明允许该头部向下游传递,或是全局配置的头部过滤规则覆盖了你的手动设置。

解决步骤

  1. 路由配置中显式允许Authorization头部
    修改Settings.json的路由配置,新增AllowedHeaders字段并加入Authorization:
{
  "Routes": [{
    "DownstreamPathTemplate": "/api/Admin/SurveyResult",
    "DownstreamScheme": "http",
    "DownstreamHostandPorts": [
      {
        "Host": "localhost",
        "Port": "5276"
      }
    ],
    "UpstreamPathTemplate": "/api/Admin/SurveyResult",
    "UpstreamHttpMethod": [ "POST" ],
    "AllowedHeaders": ["Authorization", "Content-Type"] // 明确指定允许转发的头部
  }]} 
  1. 全局配置允许所有头部(可选)
    如果需要所有请求头部都能向下游转发,可在Settings.json中添加全局配置:
{
  "GlobalConfiguration": {
    "BaseUrl": "http://localhost:你的网关端口号",
    "AllowedHeaders": ["*"] // 允许所有头部通过
  },
  "Routes": [/* 你的路由配置 */]
}
  1. 检查中间件顺序
    确保UseOcelot()的调用顺序正确,当前代码中app.UseCors()在UseOcelot()之前是合理的,但如果存在其他自定义头部处理中间件,要确认它们不会移除Authorization头部。

验证方式

可在Ocelot网关中添加中间件,打印下游请求头部确认是否转发成功:

// 在UseOcelot()之前插入该中间件
app.Use(async (context, next) =>
{
    await next();
    if (context.Items.ContainsKey("DownstreamRequest"))
    {
        var downstreamReq = context.Items["DownstreamRequest"] as HttpRequestMessage;
        if (downstreamReq != null)
        {
            Console.WriteLine("下游请求Authorization头部:" + downstreamReq.Headers.Authorization?.ToString());
        }
    }
});
await app.UseOcelot();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:07:42