1 つの操作で複数の認証方式を使用する必要がある ASP.NET Core Api があります。Swagger UI で必要なすべての認証スキームを表示して、これらの操作を文書化しようとしています。したがって、私はSwashbuckle.AspNetCore (5.1.0)ライブラリを使用して、 に を動的に追加OpenApiSecurityRequirement
しOpenApiOperation
ますIOperationFilter
。
if (authorizeAttributes.Any(x => x.AuthenticationSchemes.Contains(InternalControllerBasicAuthentication.AuthenticationScheme)))
{
requirements.Add(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme {
Reference = new OpenApiReference {
Type = ReferenceType.SecurityScheme,
Id = "credentials"
}
},
new [] { "Basic <credentials-value>" }
}
});
}
if (authorizeAttributes.Any(x => x.AuthenticationSchemes.Contains(OneTimePasswordAuthentication.AuthenticationScheme)))
{
requirements.Add(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme {
Reference = new OpenApiReference {
Type = ReferenceType.SecurityScheme,
Id = "one-time-password"
}
},
new [] { "Basic <one-time-password-value>" }
}
});
}
operation.Security = new List<OpenApiSecurityRequirement>(requirements);
さらに、 を使用して、SwaggerGenOptions
考えられるすべてのスキームを登録します。
var oneTimePasswordScheme = new OpenApiSecurityScheme
{
Name = "one-time-password",
In = ParameterLocation.Header,
Scheme = "one-time-password",
Type = SecuritySchemeType.ApiKey
};
options.AddSecurityDefinition("one-time-password", oneTimePasswordScheme);
var credentialsScheme = new OpenApiSecurityScheme
{
Name = "credentials",
In = ParameterLocation.Header,
Scheme = "credentials",
Type = SecuritySchemeType.ApiKey
};
options.AddSecurityDefinition("credentials", credentialsScheme);
OR
UI でコネクタを使用する Swagger を除いて、すべて正常に動作します。
AND
コネクタを使用して Swagger を構成する方法はありますか?
どんな助けでも大歓迎です!