调用Microsoft Graph API(OneDrive)时遇401未授权及80049217错误
解决Microsoft Graph API调用OneDrive返回80049217错误的排查方案
验证令牌实际权限范围
别只换权限类型,先确认你的访问令牌里到底包含了什么权限。把令牌复制到https://jwt.ms解析,查看scp(委托权限)或roles(应用权限)字段:- 访问当前用户个人OneDrive,需要
Files.Read或Files.ReadWrite委托权限;访问组织内所有用户OneDrive,需要Files.Read.All或Files.ReadWrite.All委托权限(需用户同意) - 用应用权限的话,必须配置
Files.Read.All或Files.ReadWrite.All,且要让租户管理员在Azure AD里完成管理员同意,否则令牌里不会带上这个权限。
- 访问当前用户个人OneDrive,需要
检查租户级别的访问限制
有些租户会通过条件访问策略或应用权限限制阻止你的应用访问OneDrive:- 让租户管理员确认你的应用是否被允许调用Microsoft Graph
- 检查是否有条件访问策略要求MFA或特定登录环境,而你的请求没满足这些条件
- 确认租户是否没禁用OneDrive的API访问权限
确认API端点是否正确
不同场景的端点不一样,用错会直接触发权限校验失败:- 当前用户OneDrive文件列表:
GET /me/drive/root/children - 指定用户OneDrive文件列表(需对应权限):
GET /users/{user-id}/drive/root/children - SharePoint文档库文件列表:
GET /sites/{site-id}/drive/root/children
- 当前用户OneDrive文件列表:
排查令牌获取流程的正确性
- 用委托权限的话,必须走授权码流程,确保用户登录时同意了所需权限,不要用客户端凭证流程获取委托权限令牌
- 用应用权限的话,要保证客户端ID、客户端密钥、租户ID都正确,且管理员已经完成权限同意
- 每次调用前检查令牌的
exp字段,别用过期令牌
内容的提问来源于stack exchange,提问作者Danee
相关产品推荐
相关产品推荐

