.net-core - swashbuckle 5.3.1 swagger ui 不发送授权标头
问题描述
我将一个项目从 dotnet core 2.1 迁移到 3.1。除了使用 swagger ui 时未发送授权标头外,一切看起来都不错。我发现了几个试图解决这个问题的 SO,这就是它的结果。
标题
启动.cs
services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development") ? false : true;
options.ClaimsIssuer = jwtAppSettingOptions[nameof(JwtIssuerOptions.Issuer)];
options.TokenValidationParameters = tokenValidationParameters;
});
services.AddSwaggerGen(c =>
{
...
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Name = "Authorization",
Type = SecuritySchemeType.ApiKey,
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"
}
},
new string[] {}
}
});
c.EnableAnnotations();
//
c.OperationFilter<HeaderParametersFilter>();
...
}
在以前版本的 Swashbuckle 中,这是使用IOperationFilter
实现处理的,我将其保留在原位,以便可以在 ui 中输入令牌。最有希望的 SO 答案是Migrating to Swashbuckle.AspNetCore version 5,其中找到了解决方案,但相同的配置对我不起作用。
HeaderParametersFilter : IOperationFilter
...
if (isAuthorized && !allowAnonymous) {
AddHeader(operation, "Authorization", "access token", "string", true, "Bearer {access token}");
}
...
private static void AddHeader(OpenApiOperation operation, string name, string description, string type, bool isRequired, string defaultValue)
{
operation.Parameters.Add(new OpenApiParameter
{
Name = name,
In = ParameterLocation.Header,
Description = description,
Required = isRequired,
Schema = new OpenApiSchema
{
Type = type,
Default = new OpenApiString(defaultValue)
}
});
}
解决方案
推荐阅读
- python - sqlite sqlalchemy“IndexError:列表索引超出范围”
- oauth2-playground - Google 令牌已过期或撤销:invalid_grant
- java - 复合模型中的火属性变化
- bash - bash 脚本在通过 systemd 运行时出现备份故障
- python - 无法使用 '.read()' 函数读取文件,出现错误
- postgresql - 具有字符串比较的连接表的性能
- javascript - 在深层嵌套对象中按特定键查找值
- android - 任务:app:compileDebugJavaWithJavac错误
- java - 如何从改造android java上传文件
- c - 每次使用以下功能时都会出现无法读取内存错误,