Estoy desarrollando una API web con .Net core 3.0 y quiero integrarla con SwashBuckle.Swagger. Está funcionando bien, pero cuando agrego autenticación JWT, no funciona como esperaba. Para hacer eso, agregué el siguiente código:
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
});
});
Después de agregar AddSecurityDefinition
función, puedo ver el botón Autorizar y cuando hago clic en él, veo el siguiente formulario:
Luego escribo Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh
, después de hacerlo, espero ver authorization: Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh
en el encabezado de la solicitud, cuando envío una solicitud a la API web de Swagger. Pero la autorización no se agrega al encabezado de la solicitud. Estoy usando SwashBuckle.Swagger (5.0.0-rc3). Tenga en cuenta que hay muchas muestras que funcionan bien en .net core 2.0, pero las funciones Swagbuckle swagger han cambiado en la última versión, por lo que no puedo usar esas muestras.
fuente
.AddSecurityRequirement
(globalmente) o.Security
(en el nivel de operación), como se explica en las respuestas a la pregunta vinculada.AddSecurityDefinition
solo no es suficiente.Respuestas:
Después de un poco de investigación, finalmente encontré la respuesta aquí
Antes de ver esta página, sabía que debería usar
AddSecurityRequirement
despuésAddSecurityDefinition
debido a muchas muestras, pero era un problema que los parámetros de la función hayan cambiado en .NET Core 3.0.Por cierto, la respuesta final es la siguiente:
fuente
Si está utilizando Swagger 3.0, entonces tiene soporte incorporado para la autenticación JWT.
Debe usar ParameterLocation.Header, SecuritySchemeType.Http, bearer y JWT en OpenApiSecurityScheme como se muestra a continuación.
Después de esto, no necesitaría especificar el token en formato Bearer {token} . Solo especifique el token y el esquema de seguridad lo aplicará automáticamente en el encabezado.
fuente
Si no desea agregar un token manualmente y desea que los ámbitos sean seleccionables junto con pasar un ID de cliente al servidor de identidad, puede agregar algo como esto.
He usado flujo implícito, pero puedes configurar cualquier flujo usando el siguiente mecanismo:
La salida será así:
fuente
Aquí hay una solución actualizada para Swashbuckle.AspNetCore 5.3.2, integrada con IdentityServer4, con una API asegurada con un token Bearer.
En
ConfigureServices()
método:En
Configure()
método:fuente
Si alguien está usando NSwag y ha aterrizado aquí después de buscar la solución, aquí está el enlace de la documentación oficial.
NSwag Habilitar autenticación JWT
PD: Sé que la pregunta original era para SwashBuckle, pero Google también muestra este enlace primero cuando busca NSwag.
fuente