已通过Azure AD B2C授权,如何让SwaggerUI正确向API发送令牌?
问题背景
我正在为应用实现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
相关产品推荐
相关产品推荐

