1

我们正在尝试在我们的 .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 和范围)?

4

0 回答 0