调用.Net Core API时Postman返回401未授权错误如何解决?
排查及解决方案

- 优先检查中间件顺序:.NET Core的认证中间件
app.UseAuthentication()必须放在app.UseAuthorization()之前,且二者都要放在app.MapControllers()前面。如果顺序颠倒,哪怕接口加了[AllowAnonymous]特性,也会优先触发授权校验返回401。 - 清理Postman的冗余认证配置:如果你在Postman的Authorization标签页误配置了Bearer Token、Basic Auth等认证规则,哪怕接口允许匿名访问,只要携带的认证信息非法/过期,部分鉴权逻辑会直接拦截返回401,不会触发
[AllowAnonymous]的免校验逻辑。可以先清空所有自定义请求头,仅保留Content-Type: application/json后重试。 - 核对全局授权过滤器配置:如果在
Program.cs中配置了全局授权策略,参考如下:
builder.Services.AddControllers(options => { options.Filters.Add(new AuthorizeFilter()); });
需要确认[AllowAnonymous]特性是直接加在目标Action方法上,同时确认该特性引用的是Microsoft.AspNetCore.Authorization命名空间下的官方特性,避免引用了同名的自定义类导致失效。
- 临时测试宽松CORS规则:如果WebAPI配置了CORS限制来源,Postman请求携带的Origin头不符合规则时,部分场景也会误返回401,可以临时加全局宽松CORS配置验证:
builder.Services.AddCors(options => { options.AddPolicy("TestAll", policy => { policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader(); }); }); // 中间件注册需放在UseAuthorization之前 app.UseCors("TestAll");
- 排查自定义鉴权中间件:如果自己实现了全局请求拦截中间件,且该中间件没有做
[AllowAnonymous]特性的判断逻辑,会直接跳过官方授权规则拦截请求返回401,可以临时注释自定义中间件测试是否恢复正常。 - 核对请求路径和方法:Swagger会自动拼接路由前缀,如果你手动在Postman填写的路由缺了前缀、或者HTTP方法选错,刚好匹配到了其他需要认证的接口,也会返回401,核对路径和方法和Swagger显示的完全一致即可。
内容的提问来源于stack exchange,提问作者syi
相关产品推荐
相关产品推荐

