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

.NET 7 Minimal Web API Bearer认证返回401未授权问题求助

.NET 7 Minimal API JWT认证401未授权问题排查与修复

问题描述

使用.NET 7开发Minimal Web API并集成Bearer Token认证,登录接口可正常生成JWT Token,但携带该Token访问受保护的/weatherforecast接口时,始终返回HTTP 401「未授权」错误。已尝试更换加密算法为HmacSha256、验证密钥有效性,在Swagger和Postman中测试均出现相同问题。

代码中的关键错误及修复方案

1. 中间件顺序颠倒

认证与授权中间件的执行顺序错误,必须先完成认证再执行授权逻辑。当前代码中app.UseAuthorization()在app.UseAuthentication()之前,导致授权流程无法获取到认证后的用户身份,直接返回401。

修复代码:
调整中间件调用顺序:

app.UseHttpsRedirection();

// 先执行认证,再执行授权
app.UseAuthentication();
app.UseAuthorization();

2. Swagger安全定义ID不匹配

Swagger配置中,AddSecurityDefinition使用的ID是"Beaver",但AddSecurityRequirement中引用的ID是"Bearer",两者不匹配会导致Swagger的授权功能无法正确关联Token(虽不是Postman报错的核心原因,但会影响Swagger使用体验)。

修复代码:
将AddSecurityDefinition的ID改为"Bearer",与授权要求中的引用保持一致:

builder.Services.AddSwaggerGen(options =>
{
    options.SwaggerDoc("v1", info);
    // 修正ID为"Bearer"
    options.AddSecurityDefinition("Bearer", securityScheme);
    options.AddSecurityRequirement(securityReq);
});

3. 额外建议(非当前401原因,但需注意)

当前代码中TokenValidationParameters的ValidateLifetime设置为false,建议开发环境也保持true,避免因Token过期逻辑失效导致后续排查问题时混淆,生产环境必须设置为true保障安全性。

验证修复效果

  1. 调整中间件顺序并修正Swagger配置后,重启API。
  2. 调用login接口获取Token。
  3. 在Swagger中点击「Authorize」按钮,输入Bearer {Token}格式内容,或在Postman请求头中添加Authorization: Bearer {Token}。
  4. 访问/weatherforecast接口,此时应能正常返回数据,不再出现401错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:28:39