web-dev-qa-db-fra.com

Configuration de Swagger (ASP.NET Core) à l'aide des en-têtes d'autorisation (porteur)

J'ai une API Web (ASP.NET Core) et j'essaie d'ajuster le swagger pour passer les appels de celui-ci . Les appels doivent contenir l'en-tête Authorization et j'utilise l'authentification du porteur . Les appels du troisième les applications pour fêtes, telles que Postman, etc. vont bien ... Mais je ne parviens pas à configurer les en-têtes pour Swagger (pour une raison quelconque, je ne reçois pas les en-têtes). Voici à quoi cela ressemble maintenant:

  "Host": "localhost:50352",
  "basePath": "/" ,
  "schemes": [
    "http",
    "https"
  ],
 "securityDefinitions":  {
    "Bearer": {
      "name": "Authorization",
      "in": "header",
      "type": "apiKey",
      "description": "HTTP/HTTPS Bearer"
    }
  },
  "paths": { 
    "/v1/{subAccountId}/test1": {
      "post": {
        "tags": [
          "auth"
        ],
        "operationId": "op1",
        "consumes": ["application/json", "application/html"],
        "produces": ["application/json", "application/html"],
        "parameters": [
          {
            "name": "subAccountId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "security":[{
          "Bearer": []
        }],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "BadRequest",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          },
          "500": {
            "description": "InternalServerError",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          }
        },
        "deprecated": false
      }
    },
22
J.Doe

Tout d’abord, vous pouvez utiliser le package Swashbuckle.AspNetCore nuget pour générer automatiquement votre définition de swagger. (testé sur 2.3.0) 

Après avoir installé le paquet, configurez-le dans Startup.cs dans la méthode ConfigureServices

        services.AddSwaggerGen(c => {
            c.SwaggerDoc("v1", new Info { Title = "You api title", Version = "v1" });
            c.AddSecurityDefinition("Bearer", new ApiKeyScheme { In = "header", Description = "Please enter JWT with Bearer into field", Name = "Authorization", Type = "apiKey" });
            c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>> {
                { "Bearer", Enumerable.Empty<string>() },
            });

        });

Ensuite, vous pouvez utiliser le bouton Autoriser en haut à droite de la page.

Au moins, vous pouvez essayer d’utiliser ce paquet pour générer une définition swagger valide

76
Vadim K

Actuellement, Swagger dispose d'une fonctionnalité d'authentification avec JWT-token et peut automatiquement ajouter un token dans l'en-tête. J'ai répondu ici .

2
Pavel K.