【问题标题】:Swagger UI AuthHeader Filter - Authroize Filter not in FilterDescriptorsSwagger UI AuthHeader 过滤器 - 授权过滤器不在 FilterDescriptors 中
【发布时间】:2020-01-23 23:31:42
【问题描述】:

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

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

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 上添加授权参数。我用应用了授权属性的方法调试了这个类,发现问题是从FilterDescriptors派生的filterPipeline不包含AuthorizeFilter。是否需要在启动类中添加一些东西来处理如何将此属性添加到我缺少的过滤器中?

【问题讨论】:

  • 在 OpenAPI 3.0 中,标头参数名为 Authorization are ignored。您需要将此标头配置为security scheme
  • @Helen Ah 这就是为什么。想知道他们为什么改变它......哦,谢谢你的帮助!得到它的设置和工作现在。如果您想发布答案,我很乐意接受!

标签: c# asp.net-core swagger-ui asp.net-core-3.0 asp.net-authorization


【解决方案1】:

在 OpenAPI 3.0 中,标头参数名为 Authorization are ignored。您需要将此标头配置为 security scheme

【讨论】: