Azure B2C自定义策略登录:ID令牌换访问令牌及端点安全咨询
解决方案:Azure B2C自定义策略下的API授权适配逻辑应用
一、直接获取访问令牌(无需事后兑换ID令牌)
你不需要额外兑换ID令牌,在自定义策略的登录流程中就能直接获取访问令牌:
- 在B2C自定义策略的Relying Party配置段,添加你的API的OAuth2Permissions,确保该API已注册为B2C的受保护资源。
- 调整前端登录请求参数:将
response_type设为code id_token(推荐生产环境用的授权码流)或token id_token(隐式流,仅限测试场景),同时指定resource参数为你的API的应用ID URI。 - 完成登录回调后,就能同时拿到ID令牌和访问令牌,直接用访问令牌调用API即可。
二、适配逻辑应用的颁发者要求
由于逻辑应用要求颁发者为login.microsoftonline.com,而B2C令牌的颁发者是{tenant}.b2clogin.com,可以用以下两种方案解决:
方案1:以API管理作为中间层
既然你已经确认ID令牌在API管理中能正常工作,可让逻辑应用通过API管理调用后端API:
- API管理侧保留B2C ID令牌的验证逻辑,确保仅已登录的B2C用户能通过校验。
- 逻辑应用与API管理之间用订阅密钥、Azure AD身份验证等方式授权(逻辑原生支持这些方式),这样逻辑应用无需直接处理B2C令牌,绕开发布者限制。
方案2:自定义逻辑应用的令牌验证规则
如果逻辑应用是用Azure AD身份验证保护的,可修改验证规则,将B2C的颁发者{tenant}.b2clogin.com加入允许列表:
- 在逻辑应用的身份验证配置中,找到「高级验证规则」,添加自定义规则校验
iss声明,兼容B2C的颁发者格式。
三、生产环境注意事项
- 优先使用授权码流获取访问令牌,避免隐式流带来的令牌泄露风险。
- 确保API的访问令牌受众(
aud声明)准确指向API的应用ID URI,逻辑应用或API管理验证时会校验该字段。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

