Swagger UI AuthHeader Filter - фильтр Authroize отсутствует в FilterDescriptors - PullRequest
0 голосов
/ 23 января 2020

У меня есть настройка Swagger UI для моего API, и я хочу добавить параметр авторизации для методов контроллера с атрибутом [Authorize] из Microsoft.AspNetCore.Authorization

В настоящее время у меня есть настраиваемый класс фильтра, настроенный путем поиска в Google для этого, который выглядит следующим образом:

public class AuthHeaderFilter : Swashbuckle.AspNetCore.SwaggerGen.IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        var filterPipeline = context.ApiDescription.ActionDescriptor.FilterDescriptors;
        var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is AuthorizeFilter);
        var allowAnonymous = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is IAllowAnonymousFilter);

        if (isAuthorized && !allowAnonymous)
        {
            if (operation.Parameters == null)
                operation.Parameters = new List<OpenApiParameter>();

            operation.Parameters.Insert(0, new OpenApiParameter
            {
                Name = "Authorization",
                In = ParameterLocation.Header,
                Description = "access token",
                Required = true,
                Schema = new OpenApiSchema
                {
                    Type = "String",
                }
            });
        }
    }
}

Проблема в том, что ни один метод не получает параметр авторизации, добавленный в пользовательский интерфейс. Я отладил этот класс с помощью методов, к которым был применен атрибут authorize, и обнаружил, что проблема в том, что filterPipeline, производный от FilterDescriptors, не содержит AuthorizeFilter. Есть ли что-то, что нужно добавить в класс запуска, который обрабатывает, как этот атрибут добавляется к пропущенным фильтрам?

1 Ответ

1 голос
/ 23 января 2020

В OpenAPI 3.0 параметры заголовка с именем Authorization игнорируются . Вам нужно настроить этот заголовок как схема безопасности .

...