「クライアント資格情報フロー」を使用して 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 とスコープと共に) ペイロードで送信されるようにすることは可能ですか?