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

如何在.Net Core的Swashbuckle中正确配置JWT Token身份验证

你配置中的问题主要出在中间件顺序和授权策略匹配两个方面,按以下步骤调整即可:

问题1:认证授权中间件顺序颠倒

ASP.NET Core 中间件按注册顺序执行,必须先运行身份认证中间件解析JWT得到用户身份,再运行授权中间件校验权限。你当前的顺序是先调用UseAuthorization再调用UseAuthentication,请求还没完成身份识别就被授权校验拦截,直接返回401。

问题2:CORS中间件位置错误

CORS中间件需要放在路由匹配之后、认证授权中间件之前,否则跨域预检请求会被认证逻辑拦截,也会导致请求失败。你当前把CORS配置放在了端点映射之后,完全没有生效。

问题3:授权策略不匹配

你自定义了名为Bearer的授权策略,但Action上的[Authorize]特性没有指定使用该策略,如果你没有设置全局默认授权策略,授权校验不会走你配置的JWT认证逻辑,也会触发401。


修复步骤

  1. 调整Configure方法的中间件顺序,修改后代码如下:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseHttpsRedirection();

    app.UseRouting();

    // CORS放在路由之后、认证之前
    app.UseCors(x => x
        .AllowAnyOrigin()
        .AllowAnyMethod()
        .AllowAnyHeader());

    // 先认证,再授权,顺序不能反
    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        _ = endpoints.MapControllers();
    });

    app.UseStatusCodePages();

    app.UseSwagger();

    app.UseSwaggerUI(c => {
        c.DefaultModelExpandDepth(0);
        c.DefaultModelsExpandDepth(-1);
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 API test");
        c.RoutePrefix = string.Empty;
    });
}
  1. 修复授权策略匹配,二选一即可:
  • 方案A:设置全局默认授权策略,修改ConfigureServices中的授权配置:
services.AddAuthorization(auth =>
{
    auth.DefaultPolicy = new AuthorizationPolicyBuilder()
        .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme‌​)
        .RequireAuthenticatedUser().Build();
});
  • 方案B:修改Action的授权特性,指定使用的策略或认证方案:
[HttpPost]
[Route("DestroyUserSession")]
// 二选一即可:指定策略 或者 直接指定JWT认证方案
[Authorize(Policy = "Bearer")]
// [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public async Task<ResultModel> DestroyUserSession([FromBody] string userID)
{
  //..... 业务逻辑
}
  1. 额外检查点
  • 你当前的Swagger安全配置是正确的,在Swagger UI点Authorize按钮输入Token时,不要手动加Bearer前缀,Swagger会自动补充,重复添加会导致认证失败。
  • 确认appsettings.json中的JwtSettings配置项(Issuer、Audience、密钥等)和你生成JWT Token时使用的参数完全一致,否则JWT校验不通过也会返回401。

内容的提问来源于stack exchange,提问作者Levesque Xylia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:06:00