1

1 つの操作で複数の認証方式を使用する必要がある ASP.NET Core Api があります。Swagger UI で必要なすべての認証スキームを表示して、これらの操作を文書化しようとしています。したがって、私はSwashbuckle.AspNetCore (5.1.0)ライブラリを使用して、 に を動的に追加OpenApiSecurityRequirementOpenApiOperationます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);

ORUI でコネクタを使用する Swagger を除いて、すべて正常に動作します。

ここに画像の説明を入力

ANDコネクタを使用して Swagger を構成する方法はありますか?

どんな助けでも大歓迎です!

4

1 に答える 1