Estou desenvolvendo alguma API da Web com o .Net core 3.0 e quero integrá-la ao SwashBuckle.Swagger. Está funcionando bem, mas quando adiciono a autenticação JWT, não funciona conforme o esperado. Para fazer isso, adicionei o código abaixo:
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
});
});
Após adicionar a AddSecurityDefinition
função, vejo o botão Autorizar e, quando clico nele, vejo o formulário abaixo:
Então digito Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh
: Depois de fazer isso, espero ver authorization: Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh
no cabeçalho da solicitação, quando enviar uma solicitação para a API da Web do Swagger. Mas a autorização não é adicionada ao cabeçalho da solicitação. Estou usando o SwashBuckle.Swagger (5.0.0-rc3). Observe que existem muitos exemplos que funcionam bem no .net core 2.0, mas as funções do swashbuckle swagger foram alteradas na versão mais recente, portanto não posso usá-los.
fonte
.AddSecurityRequirement
(globalmente) ou.Security
(no nível da operação) - conforme explicado nas respostas à pergunta vinculada.AddSecurityDefinition
sozinho não é suficiente.Respostas:
Depois de alguma pesquisa, eu finalmente encontrei a resposta aqui
Antes de ver esta página, eu sabia que deveria usá-lo
AddSecurityRequirement
porAddSecurityDefinition
causa de muitos exemplos, mas era um problema que os parâmetros de função foram alterados no .NET Core 3.0.A propósito, a resposta final é a seguinte:
fonte
Se você estiver usando o Swagger 3.0, ele possui suporte embutido para autenticação JWT.
Você precisa usar ParameterLocation.Header, SecuritySchemeType.Http, portador e JWT no OpenApiSecurityScheme, como mostrado abaixo.
Depois disso, você não precisaria especificar o token no formato Bearer {token} . Especifique apenas o token e o esquema de segurança o aplicará automaticamente no cabeçalho.
fonte
Se você não deseja adicionar um token manualmente e deseja que os escopos sejam selecionáveis juntamente com a transmissão de um clientId para o servidor de identidade, você pode adicionar algo assim.
Eu usei fluxo implícito, mas você pode configurar qualquer fluxo usando o seguinte mecanismo:
A saída será assim:
fonte
Aqui está uma solução atualizada para o Swashbuckle.AspNetCore 5.3.2, integrado ao IdentityServer4, com uma API protegida usando um token Bearer.
No
ConfigureServices()
método:No
Configure()
método:fonte
Se alguém estiver usando o NSwag e chegou aqui depois de pesquisar a solução, aqui está o link da documentação oficial.
NSwag Ativar autenticação JWT
PS: Eu sei que a pergunta original era para o SwashBuckle, mas o Google mostra esse link primeiro ao pesquisar pelo NSwag também.
fonte