在C#开发的Web API项目中,为Swagger添加JWT Bearer Token认证配置,可以让开发者在Swagger UI界面直接输入Token,测试需要鉴权的接口,避免手动拼接请求头的繁琐操作。以下是在.NET 6及以上框架中的完整实现步骤。

前置准备
首先确保项目中已经安装了Swagger相关的NuGet包,以及JWT认证相关的依赖。需要安装的包如下:
- Swashbuckle.AspNetCore
- Microsoft.AspNetCore.Authentication.JwtBearer
配置JWT认证服务
先在Program.cs中添加JWT Bearer认证的服务配置,定义Token的验证规则,示例代码如下:
// 添加JWT认证服务
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
// 是否验证发行者
ValidateIssuer = true,
// 发行者地址
ValidIssuer = builder.Configuration["Jwt:Issuer"],
// 是否验证受众
ValidateAudience = true,
// 受众地址
ValidAudience = builder.Configuration["Jwt:Audience"],
// 是否验证密钥
ValidateIssuerSigningKey = true,
// 签名密钥
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"])),
// 是否验证过期时间
ValidateLifetime = true,
// 过期时间偏移量
ClockSkew = TimeSpan.Zero
};
});
配置Swagger服务支持认证
接下来需要修改Swagger的服务配置,添加安全定义和安全要求,让Swagger UI显示Token输入框。在Program.cs的Swagger配置部分添加如下代码:
// 添加Swagger服务
builder.Services.AddSwaggerGen(options =>
{
// 添加安全定义,指定认证类型为Bearer Token
options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
// 描述信息
Description = "JWT Authorization header using the Bearer scheme. Example: "Authorization: Bearer {token}"",
// 认证类型
Type = SecuritySchemeType.Http,
// 认证方案
Scheme = "bearer",
// 承载格式
BearerFormat = "JWT",
// 认证位置
In = ParameterLocation.Header,
// 认证名称
Name = "Authorization"
});
// 添加安全要求,指定哪些接口需要认证
options.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
// 引用上面定义的安全定义
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
// 空数组表示所有接口都需要该认证
new string[] {}
}
});
});
启用认证中间件
配置完成后,需要确保在请求管道中启用了认证和授权中间件,顺序不能错误,认证中间件要在授权中间件之前,示例代码如下:
// 启用Swagger中间件 app.UseSwagger(); app.UseSwaggerUI(); // 启用认证中间件 app.UseAuthentication(); // 启用授权中间件 app.UseAuthorization(); // 映射控制器 app.MapControllers();
测试认证配置
启动项目后访问Swagger UI页面,右上角会出现一个Authorize按钮,点击后会弹出Token输入框,输入Bearer {你的Token}(注意Bearer后面有空格),点击授权后,再调用需要鉴权的接口,Swagger会自动在请求头中添加Authorization: Bearer {token}的信息,无需手动拼接。
常见问题说明
- 如果点击授权后接口仍然返回401,检查Token是否过期,或者JWT配置的发行者、受众、密钥是否和生成Token时的配置一致。
- 如果Swagger UI没有显示Authorize按钮,检查
AddSecurityDefinition和AddSecurityRequirement的配置是否正确,是否遗漏了相关代码。 - 如果需要部分接口不需要认证,可以在对应的控制器或接口方法上添加
[AllowAnonymous]特性。
C#SwaggerSwagger_UIJWT_Bearer_Token认证配置修改时间:2026-07-12 10:03:22