EduRoster.Read.All应用权限令牌申请报错,功能有效性存疑
解决EduRoster应用权限令牌请求失败的问题
你踩了应用权限和委托权限在Microsoft Graph中使用的一个常见坑,我来帮你拆解问题并给出排查步骤:
核心问题:应用权限的范围格式与委托权限不同
你尝试在令牌请求中直接指定EduRoster.Read.All作为范围,这是委托权限的用法,但应用权限的请求逻辑完全不一样:
- 委托权限需要在范围里明确指定具体权限(比如
EduRoster.ReadBasic),因为它代表用户授权的权限; - 应用权限是管理员预先授予给应用的,请求令牌时不需要指定单个权限,只需要用
https://graph.microsoft.com/.default作为范围即可——这个范围会自动包含所有已授予该应用的应用权限。
为什么用.default拿令牌后接口报错?
你提到用.default获取令牌成功,但接口返回"Required scp claim values are not provided.",这里要注意:
- 应用权限的令牌里,权限声明是
roles,而不是scp(scp是委托权限的声明); - 这个错误说明你调用的API端点可能不支持应用权限访问——有些Microsoft Graph的教育类API(比如涉及用户特定数据的端点)只允许通过委托权限访问,不接受应用权限的令牌。
排查步骤
验证API端点的权限支持
查看Microsoft Graph官方文档中你调用的具体EduRoster API端点,检查它的“权限”章节是否标注了支持Application类型的权限。如果只列出了Delegated类型,那这个接口确实无法用应用权限访问,只能使用委托权限。确认应用权限的授予状态
登录Azure AD应用注册页面,进入你的应用的“API权限”页面:- 确认
EduRoster.Read.All权限的状态是已授予[你的租户名称]的管理员同意; - 如果状态不对,先移除该权限,重新添加后再次授予管理员同意,等待5-10分钟让权限同步到租户。
- 确认
解析令牌检查权限声明
用.default获取应用权限令牌后,使用JWT解析工具查看令牌内容,确认roles字段是否包含EduRoster.Read.All:- 如果没有这个字段,说明权限没有正确授予,需要重新检查权限配置;
- 如果有这个字段但接口仍然报错,那基本可以确定该API端点不支持应用权限。
总结
如果你的业务场景必须使用应用权限(比如没有用户上下文的后台服务),但目标API不支持,那可能需要寻找替代的API端点,或者调整业务逻辑使用委托权限。如果只是测试应用权限的有效性,可以尝试调用明确支持应用权限的EduRoster API来验证。
内容的提问来源于stack exchange,提问作者Jay Williams
相关产品推荐
相关产品推荐

