Swagger UI AuthHeader过滤器-授权过滤器不在FilterDescriptors中

问题描述 投票:0回答:1

我为我的API使用了Swagger UI设置,并希望使用[Authorize]中的Microsoft.AspNetCore.Authorization属性为控制器方法添加Authorization参数>

目前,我通过谷歌搜索有一个自定义过滤器类设置,如下所示:

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",
                }
            });
        }
    }
}

问题是,没有方法在UI上添加授权参数。我使用对它们应用了authorize属性的方法调试了此类,发现问题是从FilterDescriptors派生的filterPipeline不包含AuthorizeFilter。是否需要将某些东西添加到启动类中,以处理如何将此属性添加到我所缺少的过滤器中?

我为我的API安装了Swagger UI设置,并希望使用Microsoft.AspNetCore.Authorization的[Authorize]属性为控制器方法添加Authorization参数,目前我有一个...

c# asp.net-core swagger-ui asp.net-core-3.0 asp.net-authorization
1个回答
0
投票
在OpenAPI 3.0中,标头参数名为Authorization are ignored。您需要将此标头配置为security scheme
© www.soinside.com 2019 - 2024. All rights reserved.