Я занимаюсь разработкой веб-API с .Net core 3.0 и хочу интегрировать его с 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
, После этого я ожидаю увидеть authorization: Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh
в заголовке запроса, когда отправляю запрос в Web Api от Swagger. Но авторизация не добавляется в заголовок запроса. Я использую SwashBuckle.Swagger (5.0.0-rc3). Обратите внимание, что есть много примеров, которые отлично работают на .net core 2.0, но функции Swashbuckle swagger изменились в последней версии, поэтому я не могу использовать эти примеры.
источник
.AddSecurityRequirement
(глобально) или.Security
(на уровне операций) - как объяснено в ответах на связанный вопрос.AddSecurityDefinition
одного недостаточно.Ответы:
После некоторых исследований я в конце концов нашел ответ здесь
До того, как я увидел эту страницу, я знал, что мне следует использовать
AddSecurityRequirement
после этогоAddSecurityDefinition
из-за большого количества примеров, но проблема в том, что параметры функции изменились в .NET Core 3.0.Кстати, окончательный ответ, как показано ниже:
источник
Если вы используете Swagger 3.0, он имеет встроенную поддержку аутентификации JWT.
Вам необходимо использовать ParameterLocation.Header, SecuritySchemeType.Http, bearer и JWT в OpenApiSecurityScheme, как показано ниже.
После этого вам не нужно указывать токен в формате Bearer {token} . Укажите только токен, и схема безопасности автоматически применит его в заголовке.
источник
Если вы не хотите добавлять токен вручную и хотите, чтобы области можно было выбирать вместе с передачей clientId на сервер идентификации, вы можете добавить что-то вроде этого.
Я использовал неявный поток, но вы можете настроить любой поток, используя следующий механизм:
Вывод будет таким:
источник
Вот обновленное решение для Swashbuckle.AspNetCore 5.3.2, интегрированное с IdentityServer4, с API-интерфейсом, защищенным с помощью токена Bearer.
В
ConfigureServices()
методе:В
Configure()
методе:источник
Если кто-то использует NSwag и приземлился здесь после поиска решения, вот ссылка из официальной документации.
NSwag Включить аутентификацию JWT
PS: я знаю, что оригинальный вопрос был о SwashBuckle, но Google сначала показывает эту ссылку при поиске NSwag.
источник