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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:26:07