1

「クライアント資格情報フロー」を使用して Azure トークン エンドポイントから access_token を自動的に取得するように、.NET 6 API プロジェクトで swagger を構成しようとしています。これがstartup.csの構成部分です

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "register_api", Version = "v1" });
    c.SchemaFilter<EnumSchemaFilter>();

    var jwtSecurityScheme = new OpenApiSecurityScheme
    {
        Type = SecuritySchemeType.OAuth2,
        Scheme = "bearer",
        BearerFormat = "JWT",
        Flows = new OpenApiOAuthFlows
        {
            ClientCredentials = new OpenApiOAuthFlow
            {
                TokenUrl = new Uri(@"https://login.microsoftonline.com/512024a4-8685-4f03-8086-14a61730e818/oauth2/v2.0/token"),
                Scopes = new Dictionary<string, string>() { { @"api://e92b626c-f5e7-422b-a8b2-fd073b68b4a1/.default", ".default" } }
            }
        }
    };

    c.AddSecurityDefinition(JwtBearerDefaults.AuthenticationScheme, jwtSecurityScheme);

    c.AddSecurityRequirement(new OpenApiSecurityRequirement
    {
        { jwtSecurityScheme, new string[] { @"api://e92b626c-f5e7-422b-a8b2-fd073b68b4a1/.default" } }
    });
}

ユーザーが最初に「承認」ボタンをクリックすると、次のようになります。しかし、client_id と client_secret を入力して [Authorize] ボタンをクリックすると、「Auth Error TypeError: Failed to fetch」というメッセージが表示されます。

ここに画像の説明を入力

トークン エンドポイントに送信される要求に奇妙な点があります。ペイロードには、grant_type とスコープのみが含まれます。ただし、client_id と client_secret は base64 でエンコードされ、Authorization ヘッダーで送信されます。

ここに画像の説明を入力

Azure トークン エンドポイントが access_token の生成を拒否するのはそのためですか? 同じトークン エンドポイントを使用して、postman でトークンを取得することに成功しましたが、すべてのパラメーターをペイロードに含めました。

その場合、Swagger の構成を変更して、代わりに client_id と client_secret が (grant_type とスコープと共に) ペイロードで送信されるようにすることは可能ですか?

4

0 に答える 0