已实现Azure AD客户端凭据流,验证AccessToken时因缺少scp属性失败求助
解决Azure AD客户端凭据流程中Token验证报错“scp属性不存在”的问题
错误原因
客户端凭据授权属于应用级权限,这类场景下生成的Access Token,权限声明字段是roles而非scp——scp是用户委派权限(通过用户上下文获取token)才会携带的字段。你使用的验证工具默认检查scp字段,因此触发错误。
解决方案
1. 正确配置API2的应用权限
- 在Azure AD中找到API2的应用注册,进入「公开API」页面,添加应用角色(Application Roles),定义API2对外提供的应用级权限(比如
api2.read、api2.write) - 找到API1的应用注册,进入「API权限」页面,添加API2的应用级权限,完成后必须点击授予管理员同意(客户端凭据流程要求应用权限必须经过管理员同意才能生效)
2. 调整Token验证逻辑
修改验证代码,将原本检查scp字段的逻辑替换为检查roles字段:
- 找到验证工具中判断
payload.scp的代码段,替换为判断payload.roles是否存在 - 验证时检查
roles数组中是否包含API1被授予的目标权限(比如判断payload.roles.includes('api2.read'))
3. 确保Token获取的Scope正确
客户端凭据流程中,获取Token时的scope必须格式为api://<API2的客户端ID>/.default,这个scope会返回所有已授权给API1的应用角色,确保生成的Token payload中包含roles字段。
内容的提问来源于stack exchange,提问作者Pravin Thota
相关产品推荐
相关产品推荐

