swagger - 使用 .NET Core 3.0 进行 JWT 身份验证和 Swagger
问题描述
我正在使用 .NET Core 3.0 开发一些 Web API,并希望将其与 SwashBuckle.Swagger 集成。它工作正常,但是当我添加 JWT 身份验证时,它并没有像我预期的那样工作。为此,我添加了以下代码:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "My Web API", Version = "v1" });
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey
});
});
添加AddSecurityDefinition
功能后,我可以看到授权按钮,当我点击它时,我看到下面的表格:
然后我输入Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh
. 完成后,当我从 Swagger 向 Web API 发送请求时,我希望authorization: Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh
在请求的标头中看到,但授权未添加到请求标头中。我正在使用 SwashBuckle.Swagger(5.0.0-rc3)。请注意,有许多示例在 .NET Core 2.0 上运行良好,但 Swashbuckle 招摇功能在最新版本上发生了变化,因此我无法使用这些示例。
解决方案
经过一番研究,我最终在这里找到了答案
在看到这个页面之前,我知道我应该使用AddSecurityRequirement
after,AddSecurityDefinition
因为示例很多,但是在.NET Core 3.0上函数参数发生了变化,这是一个问题。
顺便说一句,最终答案如下:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo {
Title = "My API",
Version = "v1"
});
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme {
In = ParameterLocation.Header,
Description = "Please insert JWT with Bearer into field",
Name = "Authorization",
Type = SecuritySchemeType.ApiKey
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement {
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
new string[] { }
}
});
});
推荐阅读
- python - 散景服务--show myapp
- python - 使用 CPLEX Python API 编写自定义变量选择方法
- javascript - 将 JSON 作为道具传递 - 无法读取未定义的属性“名称”
- python - Django 查询集获取所有通过选定日期的数据
- powershell - 如何从 ArrayList 中的 JSON 中删除对象
- javascript - JS 文件中未捕获的 SyntaxError
- php - 在同一页面上渲染成功或失败 REMINDER HERE
- react-native - 警报显示消息而不按警报按钮
- python - 如何在pyqt(QGIS)中捕获QDockWidget的KeyPressedEvent
- android - 使用设备所有者将系统应用设置为锁定任务包