Azure EasyAuth+B2C环境下,如何配置获取有效API调用令牌?
Azure EasyAuth 调用API时令牌受众问题的解决办法
问题根源
当请求令牌同时包含openid和API的user-impersonation范围时,B2C会生成以自身租户为受众(aud字段)的ID令牌,而非目标API的应用ID URI,导致API验证令牌时因受众不匹配失败。去掉openid范围后,请求的是访问令牌,受众会自动指向API的资源标识符,因此能通过验证。
配置步骤(强制获取API访问令牌)
1. 修改Web代理应用的EasyAuth身份提供者设置
- 打开Azure门户,找到你的Web代理容器应用,进入身份验证模块
- 编辑已配置的B2C身份提供者,在范围配置中:
- 删除
openid,只保留API的user-impersonation范围(格式为{API应用ID URI}/user-impersonation) - 明确指定资源为API的应用ID URI,不要留空或设为B2C租户地址
- 删除
2. 确认权限与同意状态
- 检查Web代理应用是否已被授予API的
user-impersonation权限,多租户场景下必须完成管理员同意 - 进入API应用的公开API页面,确保应用ID URI配置正确,
user-impersonation范围处于启用状态
3. 调整代理应用的令牌获取逻辑
- 如果代理通过EasyAuth的
/.auth/me端点拿令牌,要指定资源参数:
这样返回的就是针对API的访问令牌,而非包含GET /.auth/me?resource={API应用ID URI}openid的ID令牌 - 前端展示用户信息时,可以单独调用带
openid范围的请求获取ID令牌,和API调用的访问令牌分开处理
4. 验证配置
- 重新登录应用,触发代理调用API的流程
- 提取请求中的令牌,用
jwt.ms验证:aud字段必须等于API的应用ID URIscp字段需包含user-impersonation
多租户场景额外提示
- 确保B2C自定义策略已正确集成外部Azure AD租户,API的令牌验证逻辑能接受来自这些租户的用户身份
- 若需支持多种资源的令牌请求,可以在EasyAuth中配置多个身份提供者实例,分别对应不同的资源范围
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

