You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Teams机器人上传文件至OneDrive遇scp/roles claim错误求助

问题解答

错误原因

scp和roles是Azure AD令牌中的权限标识:

  • scp:代表用户授权给应用的权限(委托权限),仅在用户参与登录的认证流程中出现在令牌里。
  • roles:代表应用自身拥有的独立权限(应用权限),使用客户端凭证流(client_credentials)获取令牌时,仅会包含该标识。
    你遇到的错误是因为获取到的访问令牌中既没有scp也没有roles,导致Microsoft Graph API判定无权限执行操作。

疑问1解答

权限缺失问题出在机器人的Azure AD应用配置中,并非初始认证请求的参数问题。你使用的是客户端凭证流,该流程的令牌应包含roles标识,但目前没有,说明你的Azure AD应用要么未配置对应的应用权限,要么配置后未完成管理员同意步骤。

疑问2解答

需要在Azure AD应用中配置对应权限并完成管理员同意,分两种场景处理:

  1. 上传文件到发起请求用户的OneDrive

    • 客户端凭证流不适用此场景,需切换为授权码流(需用户登录授权)
    • 在Azure AD应用的「API权限」中添加Files.ReadWrite(委托权限)
    • 用户授权后获取的令牌会包含scp标识,即可正常调用上传接口
  2. 上传文件到应用自身/指定服务账户的OneDrive

    • 在Azure AD应用的「API权限」中添加Files.ReadWrite.All或Sites.ReadWrite.All(应用权限)
    • 点击「授予管理员同意」(需全局管理员权限操作)
    • 重新获取令牌,此时令牌会包含roles标识
    • 同时需修改上传请求路径,指定具体用户的Drive:
      POST /v1.0/users/{目标用户ID}/drive/root:/filename.txt:/content HTTP/1.1
      Host: graph.microsoft.com
      Authorization: Bearer <你的访问令牌>
      Content-Type: text/plain
      
      hello_world
      

额外验证步骤

可将获取到的令牌复制到JWT解析工具中,检查令牌内容是否包含scp或roles字段,以此验证权限配置是否生效。

内容的提问来源于stack exchange,提问作者LewlSauce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:34:51