使用Microsoft Graph API上传SharePoint文件遇InvalidRequest错误
问题排查方案
针对你遇到的「Graph Explorer令牌能正常上传SharePoint文件,自己通过AD获取的令牌却报InvalidRequest」问题,结合读取功能正常的情况,从以下几个方向排查:
检查令牌受众(Audience)
用jwt.ms解码你的AD令牌,查看aud字段是否为https://graph.microsoft.com。Graph Explorer的令牌受众默认是Graph API,如果你自己生成的令牌受众设成了租户ID或其他值,会直接触发InvalidRequest。确认权限类型与上传场景匹配
上传接口的权限分两种:- 如果是模拟用户上传(比如调用
/me/drive/items/...或团队站点的/groups/{id}/drive/items/...),必须用委派权限; - 如果是应用身份直接上传(调用
/sites/{id}/drive/items/...),需要应用权限且已获得管理员同意。
你读取正常可能是读取接口兼容两种权限,但上传对权限类型要求更严格,比如Files.ReadWrite.All作为应用权限时,是否真的完成了管理员同意流程?
- 如果是模拟用户上传(比如调用
核对上传请求的端点路径
InvalidRequest大多和路径错误有关:- 检查站点ID、文档库ID、文件夹路径是否拼写正确,有没有多/少斜杠,或者误用了错误的资源ID;
- 对比Graph Explorer里能成功的请求URL,和你代码里的URL是否完全一致(除了动态参数)。
检查请求头与请求体格式
- 确保
Authorization头格式正确:Bearer {你的令牌},没有多余空格或符号; - 上传文件时
Content-Type要设置为application/octet-stream(或对应文件的MIME类型),请求体必须是文件的二进制内容,不能是JSON或其他格式。
- 确保
验证令牌包含的权限范围
解码令牌查看scp(委派权限)或roles(应用权限)字段,确认包含的权限是否覆盖当前上传场景:- 比如上传到团队文档库,除了Files.ReadWrite.All,是否需要Group.ReadWrite.All?
- 如果刚添加权限,需要重新获取令牌,旧令牌不会自动包含新权限。
内容的提问来源于stack exchange,提问作者Tymon Tymański
相关产品推荐
相关产品推荐

