ASP.NET Core 8中NSwag配置Identity安全方案遇401未授权问题
ASP.NET Core 8 + NSwag + Identity 401 问题排查与修复
针对你遇到的授权端点返回401的问题,从配置细节和中间件逻辑入手,有几个关键修复点:
1. 修正NSwag安全方案类型
你的NSwag配置误将Bearer token归类为ApiKey类型,这是核心错误。Bearer认证属于Http类型的安全方案,需调整配置:
builder.Services.AddOpenApiDocument(doc => { doc.AddSecurity("bearer", new OpenApiSecurityScheme { Type = OpenApiSecuritySchemeType.Http, // 改为Http类型 Scheme = "Bearer", // 指定Bearer认证方案 Name = "Authorization", In = OpenApiSecurityApiKeyLocation.Header, Description = "Bearer token authorization header", }); doc.OperationProcessors.Add(new AspNetCoreOperationSecurityScopeProcessor("bearer")); });
2. 确保认证/授权中间件顺序正确
ASP.NET Core管道中,认证中间件必须先于授权中间件执行,且需放在所有端点映射之前。检查Program.cs是否添加了以下代码:
// 必须放在app.MapIdentityApi和app.MapGet等端点配置之前 app.UseAuthentication(); app.UseAuthorization();
缺少这两行的话,系统不会执行token认证逻辑,直接返回401。
3. 验证Token的获取与使用
- 先通过
/login端点(由MapIdentityApi<ApplicationUser>自动生成)获取有效Bearer token,确认返回的是标准JWT格式。 - 请求
/端点时,需在请求头中携带:Authorization: Bearer {你的token},注意Bearer与token之间必须有空格。
4. 明确授权策略与认证方案绑定
如果默认授权策略存在匹配问题,可通过AddAuthorizationBuilder强制绑定Identity的Bearer认证方案:
builder.Services.AddAuthorizationBuilder() .SetDefaultPolicy(new AuthorizationPolicyBuilder() .AddAuthenticationSchemes(IdentityConstants.BearerScheme) .RequireAuthenticatedUser() .Build());
内容的提问来源于stack exchange,提问作者Maik Hasler
相关产品推荐
相关产品推荐

