如何在.NET Core 7中为特定端点禁用Swagger授权
解决方案:通过自定义特性+OperationFilter实现声明式排除
步骤1:创建自定义排除特性
先定义一个特性,用来标记需要排除Swagger自动添加Authorization头的端点:
[AttributeUsage(AttributeTargets.Method)] public class ExcludeSwaggerAuthorizationHeaderAttribute : Attribute { }
步骤2:实现IOperationFilter移除安全规则
编写OperationFilter逻辑,检查当前操作是否带有上述特性,若有则移除对应的Bearer安全要求:
public class ExcludeAuthorizationHeaderFilter : IOperationFilter { public void Apply(OpenApiOperation operation, OperationFilterContext context) { var hasExcludeAttribute = context.MethodInfo .GetCustomAttributes(typeof(ExcludeSwaggerAuthorizationHeaderAttribute), false) .Any(); if (hasExcludeAttribute) { // 移除所有Bearer类型的安全要求 operation.Security = operation.Security? .Where(s => !s.ContainsKey("Bearer")) .ToList(); // 如果没有剩余安全规则,直接清空 if (!operation.Security?.Any() ?? true) { operation.Security = null; } } } }
步骤3:注册Filter到Swagger配置
在Program.cs的Swagger配置中添加这个自定义Filter:
builder.Services.AddSwaggerGen(c => { // 其他Swagger配置(比如文档信息、XML注释等) // 注册自定义Filter c.OperationFilter<ExcludeAuthorizationHeaderFilter>(); // 你的Bearer安全规则原有配置 c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Name = "Authorization", Type = SecuritySchemeType.Http, Scheme = "Bearer", BearerFormat = "JWT", In = ParameterLocation.Header, Description = "JWT Authorization header using the Bearer scheme." }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, Array.Empty<string>() } }); });
步骤4:给目标端点标记特性
在那个重定向到外部API的AllowAnonymous端点上,加上自定义的排除特性:
[Authorize] public class YourController : ControllerBase { [AllowAnonymous] [ExcludeSwaggerAuthorizationHeader] public IActionResult RedirectToExternalResource() { return Redirect("https://external-api.example.com/target-resource"); } // 其他需要认证的端点... }
关于之前Filter失效的说明
你之前尝试的IDocumentFilter/IOperationFilter没生效,大概率是逻辑没有精准匹配目标端点,或是没有正确移除对应的Bearer安全要求。这个方案通过声明式标记特性的方式,能精准定位需要排除的端点,逻辑清晰且和业务代码耦合度低,完全符合你要的声明式配置需求。
内容的提问来源于stack exchange,提问作者Viktor Chernodub
相关产品推荐
相关产品推荐

