Swagger UI AuthHeader Filter语言 - Authroize Filter 不在 FilterDes



我的 API 有一个 Swagger UI 设置,并希望为控制器方法添加一个授权参数,该参数具有[Authorize]属性来自Microsoft.AspNetCore.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 上添加的授权参数。我使用应用了授权属性的方法调试了这个类,发现问题是从 FilterDescriptors 派生的 filterPipeline 不包含 AuthorizeFilter。是否需要将某些内容添加到启动类中,以处理如何将此属性添加到我缺少的筛选器中?

在 OpenAPI 3.0 中,名为Authorization的标头参数将被忽略。您需要将此标头配置为安全方案。

最新更新