我们正在尝试在我们的 .NET 6 API 项目中配置 swagger,以便它使用“客户端凭据流”自动从 Azure 令牌端点检索 access_token。这是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 的原因吗?我使用了相同的令牌端点并成功使用邮递员获取令牌,但我在有效负载中包含了所有参数。
如果是这种情况,是否可以更改 Swagger 的配置,以便在有效负载中发送 client_id 和 client_secret(连同 grant_type 和范围)?