ReactJS+Azure APIM+Entra ID(PKCE):如何在令牌中获取AD安全组?
解决Entra ID令牌中未直接返回应用分配组ID的问题
针对你遇到的问题,以下是具体的排查和解决步骤:
1. 修正企业应用的组分配对象
你当前的组分配逻辑有误——ApplicationGroup类型的组声明,指的是用户通过安全组被分配到API的企业应用,而非客户端应用。正确操作:
- 进入Entra ID的「企业应用」,找到你的API对应的企业应用
- 转到「用户和组」,添加目标AD安全组(确保测试用户属于该组)
- 客户端应用的企业应用无需分配组,
ApplicationGroup仅关注用户对API的分配关系
2. 配置API应用的令牌声明
在API应用注册的「令牌配置」中,主动添加groups声明:
- 点击「添加声明」,选择「组」类型
- 选择「分配给应用的组」作为数据源,勾选「访问令牌」(确保调用APIM的访问令牌中包含组ID)
- 保存配置
3. 验证客户端应用的权限设置
确保客户端应用配置的是API应用的Delegated权限且已完成管理员同意:
- 进入客户端应用注册的「API权限」,清理无关权限,仅保留自身API的Delegated权限
- 确认权限状态为「已授予管理员同意」
4. 确认获取的是API的访问令牌
测试脚本需确保请求的是针对API的访问令牌,而非客户端的ID令牌:
- 请求令牌时,
scope参数必须设置为API应用暴露的范围(例如api://<API-App-ID>/access_as_user) - 解码令牌时,检查
aud(受众)字段是否为API的应用ID URI,而非客户端应用ID
5. 重新获取令牌验证
修改配置后旧令牌不会生效,需清除登录缓存或重新发起授权流程,获取新令牌后再检查groups字段
额外排查点
- 确认客户端应用清单中的
groupMembershipClaims确实为"ApplicationGroup",无拼写错误或多值冲突 - 核实测试用户仅属于被分配到API企业应用的那个安全组,无其他冗余组分配
内容的提问来源于stack exchange,提问作者ClaudeVernier
相关产品推荐
相关产品推荐

