Swashbuckle 5.3.1 Swagger UI не отправляет заголовок авторизации - PullRequest
0 голосов
/ 09 апреля 2020

Я перенес проект из do tnet core 2.1 в 3.1. Все выглядит хорошо, за исключением того, что заголовок авторизации не отправляется при использовании Swagger UI. Я нашел несколько SO, которые пытались решить эту проблему, и это является ее результатом.

headers

enter image description here

Startup.cs

   services.AddAuthentication(options =>
   {
      options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
      options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
       options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    })
    .AddJwtBearer(options =>
    {
      options.RequireHttpsMetadata = (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development") ? false : true;
      options.ClaimsIssuer = jwtAppSettingOptions[nameof(JwtIssuerOptions.Issuer)];
            options.TokenValidationParameters = tokenValidationParameters;
    });


  services.AddSwaggerGen(c =>
  {
   ...
   c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
   {
      Name = "Authorization",
      Type = SecuritySchemeType.ApiKey,
      Scheme = "Bearer",
      BearerFormat = "JWT",
      In = ParameterLocation.Header,
      Description = "JWT Authorization header using the Bearer scheme."
   });
   c.AddSecurityRequirement(new OpenApiSecurityRequirement
     {
       {
         new OpenApiSecurityScheme
         {
           Reference = new OpenApiReference
           {
               Type = ReferenceType.SecurityScheme,
               Id = "Bearer"
           }
         },
         new string[] {}
    }
  });
  c.EnableAnnotations();
  //
  c.OperationFilter<HeaderParametersFilter>();
  ...
  }

В предыдущей версии Swashbuckle это было обработано с использованием реализации IOperationFilter, и я оставил это на месте, чтобы токен мог быть введен в пользовательском интерфейсе. Наиболее многообещающим ответом SO был следующий: Миграция в Swashbuckle.AspNetCore версии 5 , где было найдено решение, но у меня не сработали те же конфигурации.

HeaderParametersFilter: IOperationFilter

  ...
   if (isAuthorized && !allowAnonymous) {
            AddHeader(operation, "Authorization", "access token", "string", true, "Bearer {access token}");        
    }
   ...
    private static void AddHeader(OpenApiOperation operation, string name, string description, string type, bool isRequired, string defaultValue)
    {
        operation.Parameters.Add(new OpenApiParameter
        {
            Name = name,
            In = ParameterLocation.Header,
            Description = description,
            Required = isRequired,
            Schema = new OpenApiSchema
            {
                Type = type,
                Default = new OpenApiString(defaultValue)
            }
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...