Azure多租户场景下客户端凭证流返回的Bearer Token无应用角色问题
Azure跨租户客户端凭证流Token缺失应用角色的解决方法
问题场景
- 在租户A创建Web API应用注册
fake-web-api,添加应用角色fakeAppRole - 租户B管理员通过管理员同意链接将该API导入为租户B的企业应用
- 租户B创建守护应用
fake-daemon-app,配置对fake-web-api的fakeAppRole权限并生成客户端密钥 - 调用API时,客户端凭证流返回的Bearer Token不含
roles字段,导致被API拒绝(单租户场景正常)
核心原因
跨租户场景下,管理员完成API权限同意后,应用角色不会自动分配给守护应用,必须手动完成角色分配操作。
解决步骤
进入租户B的Azure AD企业应用页面
找到从租户A同步过来的fake-web-api企业应用。为守护应用分配应用角色
- 打开该企业应用的「用户和组」选项
- 点击「添加用户/组」,在「用户和组」选择器中切换到「应用程序」标签,选中租户B的
fake-daemon-app - 在「选择角色」列表中勾选
fakeAppRole,确认完成分配
重新获取Token并测试
使用守护应用的客户端凭证重新请求Token,此时Token的roles字段会包含fakeAppRole,即可正常调用租户A的Web API。
额外检查项
- 请求Token时的
scope必须指定为api://{租户A的fake-web-api客户端ID}/.default,确保跨租户环境下Azure AD能正确识别目标API - 确认租户A中
fake-web-api的应用角色定义里,allowedMemberTypes包含Application类型(只有允许应用主体的角色才会出现在客户端凭证流的Token中)
内容的提问来源于stack exchange,提问作者Selmir Aljic
相关产品推荐
相关产品推荐

