g0n*_*0np 11 jwt swagger asp.net-core-webapi asp.net-core-2.1
我正在使用 .Net Core 2.1 创建 API,并使用 JSON Web Token (JWT) 进行身份验证。
我有 2 个控制器:AuthenticationController和UserController. 我AuthenticationController用[AllowAnonymous]和装饰UserController过[Authorize]。
Swagger 工作正常:它允许我在没有请求授权的情况下访问 AuthenticationController (SignUp/SignIn) 中的端点,并且它确实请求 JWT 在UserController.
然而,在 Swagger UI 中,每个控制器的每个端点都显示一个挂锁图标,就好像它们都需要授权一样。一切正常并按预期工作,但让我烦恼的是不需要授权的端点仍然显示挂锁图标。
有没有办法从这些端点上删除挂锁图标?
我相信可以用 做一些事情,OperationFilter但我找不到方法。
当然,您需要使用 anIOperationFilter来删除匿名端点的挂锁图标。
// AuthResponsesOperationFilter.cs
public class AuthResponsesOperationFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
var authAttributes = context.MethodInfo.DeclaringType.GetCustomAttributes(true)
.Union(context.MethodInfo.GetCustomAttributes(true))
.OfType<AuthorizeAttribute>();
if (authAttributes.Any())
{
var securityRequirement = new OpenApiSecurityRequirement()
{
{
// Put here you own security scheme, this one is an example
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
},
Scheme = "oauth2",
Name = "Bearer",
In = ParameterLocation.Header,
},
new List<string>()
}
};
operation.Security = new List<OpenApiSecurityRequirement> { securityRequirement };
operation.Responses.Add("401", new OpenApiResponse { Description = "Unauthorized" });
}
}
}
// Startup.cs
services.AddSwaggerGen(c =>
{
...
c.OperationFilter<AuthResponsesOperationFilter>();
};
Run Code Online (Sandbox Code Playgroud)
不要忘记,以消除任何调用AddSecurityRequirement你的Startup.cs,否则挂锁图标仍然会被添加到所有端点。
小智 6
安装包
Swashbuckle.AspNetCore.Filters
然后当你记录你的招摇时,你需要添加以下行
options.OperationFilter<SecurityRequirementsOperationFilter >();
Run Code Online (Sandbox Code Playgroud)
这是 .NET 6 的示例
builder.Services.AddSwaggerGen(options => {
options.SwaggerDoc("v1", new OpenApiInfo
{
Title = "API",
Version = "v1",
Description = "API using .NET 6"
});
options.OperationFilter<SecurityRequirementsOperationFilter>();
});
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
2669 次 |
| 最近记录: |