Je développe une API Web avec .Net core 3.0 et je souhaite l'intégrer à SwashBuckle.Swagger. Cela fonctionne bien, mais lorsque j'ajoute l'authentification JWT, cela ne fonctionne pas comme prévu. Pour ce faire, j'ai ajouté le code ci-dessous:
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
});
});
Après avoir ajouté une AddSecurityDefinition
fonction, je peux voir le bouton Autoriser et quand je clique dessus, je vois le formulaire ci-dessous:
Ensuite, je tape Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh
, Après l'avoir fait, je m'attends à voir authorization: Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh
dans l'en-tête de la demande, lorsque j'envoie une demande à l'API Web de Swagger. Mais l'autorisation n'est pas ajoutée à l'en-tête de la demande. J'utilise SwashBuckle.Swagger (5.0.0-rc3). Veuillez noter qu'il existe de nombreux exemples qui fonctionnent correctement sur .net core 2.0, mais les fonctions de swagger Swashbuckle ont changé sur la dernière version, donc je ne peux pas utiliser ces exemples.
la source
.AddSecurityRequirement
(globalement) ou.Security
(au niveau de l'opération) - comme expliqué dans les réponses à la question liée.AddSecurityDefinition
seul ne suffit pas.Réponses:
Après quelques recherches, j'ai finalement trouvé la réponse ici
Avant de voir cette page, je savais que je devrais l'utiliser
AddSecurityRequirement
après àAddSecurityDefinition
cause de nombreux exemples, mais c'était un problème que les paramètres de la fonction ont changé sur .NET Core 3.0.Soit dit en passant, la réponse finale est la suivante:
la source
Si vous utilisez Swagger 3.0, il dispose d'une prise en charge intégrée pour l'authentification JWT.
Vous devez utiliser ParameterLocation.Header, SecuritySchemeType.Http, bearer et JWT dans OpenApiSecurityScheme comme indiqué ci-dessous.
Après cela, vous n'aurez plus besoin de spécifier de jeton au format Bearer {token} . Spécifiez uniquement le jeton et le schéma de sécurité l'appliquera automatiquement dans l'en-tête.
la source
Si vous ne souhaitez pas ajouter un jeton manuellement et que vous souhaitez que les étendues soient sélectionnables et que vous passiez un clientId au serveur d'identité, vous pouvez ajouter quelque chose comme ceci.
J'ai utilisé un flux implicite, mais vous pouvez configurer n'importe quel flux à l'aide du mécanisme suivant:
La sortie sera comme ceci:
la source
Voici une solution mise à jour pour Swashbuckle.AspNetCore 5.3.2, intégrée à IdentityServer4, avec une API sécurisée à l'aide d'un jeton Bearer.
En
ConfigureServices()
méthode:En
Configure()
méthode:la source
Si quelqu'un utilise NSwag et a atterri ici après avoir recherché la solution, voici le lien de la documentation officielle.
NSwag Activer l'authentification JWT
PS: Je sais que la question d'origine était pour SwashBuckle, mais Google affiche également ce lien lors de la recherche de NSwag.
la source