Swagger UI AuthHeader 过滤器 - 授权过滤器不在 FilterDescriptors 中
Swagger UI AuthHeader Filter - Authroize Filter not in FilterDescriptors
我为我的 API 设置了一个 Swagger UI,我希望使用 Microsoft.AspNetCore.Authorization
[=14 中的 [Authorize]
属性为控制器方法添加授权参数=]
目前我有一个自定义过滤器 class 通过谷歌搜索如何设置它看起来像这样:
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 上添加的授权参数。我使用应用了授权属性的方法对此 class 进行了调试,发现问题是从 FilterDescriptors 派生的 filterPipeline 不包含 AuthorizeFilter。是否需要在启动 class 中添加一些东西来处理如何将此属性添加到我缺少的过滤器中?
在 OpenAPI 3.0 中,header 参数改为名为 Authorization
are ignored. You need to configure this header as a security scheme。
我为我的 API 设置了一个 Swagger UI,我希望使用 Microsoft.AspNetCore.Authorization
[=14 中的 [Authorize]
属性为控制器方法添加授权参数=]
目前我有一个自定义过滤器 class 通过谷歌搜索如何设置它看起来像这样:
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 上添加的授权参数。我使用应用了授权属性的方法对此 class 进行了调试,发现问题是从 FilterDescriptors 派生的 filterPipeline 不包含 AuthorizeFilter。是否需要在启动 class 中添加一些东西来处理如何将此属性添加到我缺少的过滤器中?
在 OpenAPI 3.0 中,header 参数改为名为 Authorization
are ignored. You need to configure this header as a security scheme。