.Net Core 2.1 Web API:Swagger无法发送JWT Bearer令牌求助
解决Swagger无法发送JWT Bearer令牌的问题
看起来你已经配置了SecurityDefinition,但Swagger还需要额外的配置才能主动携带令牌请求接口。我来帮你补全缺失的步骤:
首先,在你的ConfigureServices方法里,给Swagger添加SecurityRequirement,告诉它哪些接口需要使用Bearer认证;然后在SwaggerUI的配置里启用令牌输入的UI组件,这样你就能在Swagger页面里输入令牌并自动携带到请求中了。
下面是完整的Swagger配置代码,你可以对比自己的代码补充缺失的部分:
public void ConfigureServices(IServiceCollection services) { // 其他服务配置(比如AddMvc、AddAuthentication等)... services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "你的API名称", Version = "v1" }); // 你已经添加的SecurityDefinition c.AddSecurityDefinition("Bearer", new ApiKeyScheme { In = "header", Description = "请输入格式为 `Bearer {你的令牌}` 的认证信息", Name = "Authorization", Type = "apiKey" }); // 新增:添加SecurityRequirement,指定接口需要Bearer认证(默认覆盖所有接口) c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>> { { "Bearer", new string[] { } } }); }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // 其他中间件配置(比如UseAuthentication、UseMvc等)... app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API V1"); // 新增:启用SwaggerUI的Bearer令牌输入功能 c.EnableBearerTokenAuth(); }); }
补充几个关键细节:
- 确保需要认证的控制器/Action上标记了
[Authorize]属性,这样Swagger才会在对应接口上显示认证锁图标,提示需要携带令牌。 - 输入令牌时严格按照
Bearer {你的令牌}格式填写(注意Bearer和令牌之间有空格),比如Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...。 - 如果只有部分接口需要认证,可以在不需要的接口上标记
[AllowAnonymous],或者调整AddSecurityRequirement的规则来灵活控制范围。
配置完成后,你在Swagger页面顶部会看到一个"Authorize"按钮,点击后输入令牌,后续的接口请求就会自动带上Bearer令牌了。
内容的提问来源于stack exchange,提问作者Edwin
相关产品推荐
相关产品推荐

