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

JWT在Postman正常但ASP.NET Core 6 MVC调用API返回401未授权

问题:ASP.NET Core MVC调用JWT授权API返回401且Authorization头丢失

我有两个ASP.NET Core 6应用:一个MVC Web应用,一个Web API。JWT令牌由Web API生成,Postman使用该令牌访问带[Authorize]特性的接口可正常返回200 OK,但MVC应用或独立控制台程序调用时,API端无法接收到Authorization请求头,导致返回401未授权响应。


解决方案

1. 修复MVC调用代码的变量名错误

在GetApiList方法中,参数传入的是userToken,但代码里错误使用了未定义的token变量,导致Authorization头未正确设置:

// 原错误代码
// client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

// 修改为:使用传入的userToken参数
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", userToken);

2. 修正CORS配置的Origin格式

API的CORS策略中,WithOrigins的第一个Origin末尾多了斜杠,导致跨域匹配失败,浏览器/HTTP客户端会拦截Authorization头:

// 原错误配置
// builder.WithOrigins("https://localhost:7236/", "http://localhost:5236")

// 修改为:去掉Origin末尾的斜杠,同时添加AllowCredentials支持身份头
builder.WithOrigins("https://localhost:7236", "http://localhost:5236")
       .AllowAnyHeader()
       .AllowAnyMethod()
       .AllowCredentials();

3. 避免HTTPS重定向丢失请求头

API启用了app.UseHttpsRedirection(),如果MVC调用的是HTTP地址,重定向到HTTPS时Authorization头会丢失。解决方式:

  • MVC调用时直接使用API的HTTPS地址(如https://localhost:7031/api/gallery/authtestapi)
  • 若需保持HTTP调用,可在开发环境临时注释app.UseHttpsRedirection()(生产环境不推荐)

4. 规范Authorization头的设置方式

手动拼接Bearer +token容易出现空格错误,建议使用AuthenticationHeaderValue类构造头:

// 原代码
// client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);

// 修改为更可靠的方式
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

5. 排查中间件或代理的头拦截问题

如果API使用了代理或自定义中间件,可能会拦截Authorization头。开发环境下可添加转发头配置:

// 在Program.cs的UseRouting前添加
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:10:54