ASP.NET Core Web API中Postman携带JWT Bearer Token请求受保护接口返回401 Unauthorized问题求助
嘿,我来帮你排查下这个闹心的401问题!这种情况我之前也踩过好几次坑,大概率是配置或者请求细节上的小疏漏,咱们一步步来捋:
先确认Program.cs/Startup.cs里的JWT认证配置是否完全匹配
生成Token时用的Issuer、Audience、密钥(SecretKey),必须和认证配置里的参数完全一致,哪怕一个字符错了都不行!比如生成Token时用的是"MyApiSecretKey2024",验证时就不能写成"MyApiSecretKey2023"。给你贴个标准配置参考:builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "MyApiIssuer", ValidAudience = "MyApiAudience", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("MyApiSecretKey2024")) }; });另外千万别忘了中间件的顺序:
app.UseAuthentication();必须在app.UseAuthorization();之前,而且两者都要放在app.UseRouting();之后、app.UseEndpoints();之前,顺序错了认证直接不生效!检查Postman的Token携带方式是否正确
别手动在Header里敲Authorization: Bearer <token>,很容易多打空格或者漏写Bearer。直接用Postman的「Authorization」标签,类型选「Bearer Token」,把完整Token粘贴到Token输入框里,Postman会自动帮你生成正确的请求头。验证Token Claims和接口授权要求是否匹配
比如你给接口加了[Authorize(Roles = "Admin")],但生成Token时根本没加Role声明,或者声明值是"User"不是"Admin",那肯定会被拦截。你可以在jwt.io里解析Token,看看Claims列表里有没有接口要求的字段和值。再确认Token的有效性细节
虽然你说jwt.io验证过有效,但再检查下exp(过期时间)字段是不是已经过了?生成Token时别不小心把过期时间设成过去的了,比如写成DateTime.UtcNow.AddMinutes(-10),那生成出来的Token直接就是无效的。排查路由和HTTPS的小问题
先确认请求的接口路径有没有拼写错误,有时候路径错了也可能返回401(虽然通常是404,但特殊配置下会有例外)。如果本地用HTTPS,Postman没信任证书也可能有影响,试试切换成HTTP请求看看会不会有变化。
要是这些都排查完还是没解决,把你的Program.cs里的认证授权配置、生成Token的代码贴出来,我再帮你揪细节!
备注:内容来源于stack exchange,提问作者d.m d.m

