You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已通过Azure AD B2C授权,如何让SwaggerUI正确向API发送令牌?

Azure AD B2C认证后SwaggerUI调用接口Authorization头为Bearer undefined问题

问题背景

我正在为应用实现Azure AD B2C认证,计划使用SwaggerUI开展测试。目前已通过SwaggerUI的OAuth2授权码流+PKCE完成Azure AD B2C登录,成功获取多枚令牌,返回内容如下:

{"id_token": "<valid token>", "token_type": "Bearer", "not_before": 1702649151, "id_token_expires_in": 3600, "profile_info": "<valid token>", "scope": "openid", "refresh_token": "<valid token>", "refresh_token_expires_in": 86400}

但调用接口时始终失败,通过开发者工具发现请求的Authorization头被设为Bearer undefined,尝试过多个同类问题的解决方案均无效。

当前配置代码

安全要求定义

private static OpenApiSecurityRequirement Oauth2SecurityRequirement =>
    new()
    {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference
                {
                    Type = ReferenceType.SecurityScheme,
                    Id = "oauth2"
                },
                Scheme = "oauth2",
                Name = "oauth2",
                In = ParameterLocation.Header
            },
            new List<string>()
        }
    };

(也尝试过将scheme/id设为bearer,无差异)

SwaggerGen配置

c.AddSecurityRequirement(Oauth2SecurityRequirement);
c.OperationFilter<GenericOperationFilter>(Oauth2SecurityRequirement);

其中c为SwaggerGenOptions对象。

操作过滤器代码

public class GenericOperationFilter : IOperationFilter
{
    private readonly OpenApiSecurityRequirement _defaultRequirement;

    public GenericOperationFilter(OpenApiSecurityRequirement defaultRequirement)
    {
        _defaultRequirement = defaultRequirement;
    }
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        if (context.MethodInfo.GetCustomAttributes(true).OfType<AuthorizeAttribute>().Any())
        {
            operation.Security = new List<OpenApiSecurityRequirement>
            {
                //same security requirment defined in AddSecurityRequirement
                _defaultRequirement
            };
        }
    }
}

现状总结

  • Azure AD B2C认证成功,已获取多枚令牌;
  • SwaggerUI的「Authorize」按钮及接口均显示锁形图标;
  • 调用接口时,Authorization头未正确携带令牌(/utility/claims是输出用户声明的接口)

内容的提问来源于stack exchange,提问作者Christian Wattengård

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 02:03:21