调用Microsoft Graph API获取OneDrive文件列表时遭遇InvalidAuthenticationToken错误
调用Microsoft Graph API获取OneDrive文件列表时遭遇InvalidAuthenticationToken错误
嘿,我看你这情况是拿到了访问令牌,但调用API的时候踩了InvalidAuthenticationToken的坑,还提示JWT格式不对对吧?咱们一步步来捋清楚问题出在哪:
问题根源:你拿到的是旧版OneDrive API的令牌,不兼容Microsoft Graph
你之前用的MSA OAuth流程拿到的令牌,是针对旧版OneDrive个人版API的,这种令牌不是标准的JWT格式(没有.分隔的三段式结构),而现在官方推荐的Microsoft Graph API只认符合JWT规范的令牌,自然会报错。
解决步骤:切换到Azure AD v2.0授权流程拿正确的令牌
1. 调整授权与令牌请求的端点
把你之前的授权请求和令牌请求端点,换成Azure AD v2.0的版本:
- 授权请求地址:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize - 令牌请求地址:
https://login.microsoftonline.com/common/oauth2/v2.0/token
2. 替换成Graph API的权限范围
把之前的onedrive.readwrite权限换成Graph API的对应权限,比如:
- 只读权限:
Files.Read - 读写权限:
Files.ReadWrite
3. 调用正确的Graph API端点获取文件列表
拿到新的JWT格式令牌后,用这个端点请求OneDrive根目录的文件列表:
GET https://graph.microsoft.com/v1.0/me/drive/root/children Authorization: Bearer {你的JWT格式访问令牌}
验证令牌是否符合要求
你可以把新拿到的令牌复制出来看看,标准JWT是Header.Payload.Signature三段式结构,比如:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
如果你的令牌是这种带两个.的格式,就说明是符合要求的。
给你一个Node.js的参考示例
const axios = require('axios'); // 这里替换成你通过v2.0流程拿到的JWT格式访问令牌 const accessToken = '你的有效访问令牌'; async function fetchOneDriveFiles() { try { const res = await axios.get('https://graph.microsoft.com/v1.0/me/drive/root/children', { headers: { 'Authorization': `Bearer ${accessToken}` } }); console.log('OneDrive文件列表:', res.data); } catch (err) { console.error('请求失败:', err.response?.data || err.message); } } fetchOneDriveFiles();
另外还要注意:你在Azure注册的应用,要确保开启了“允许个人Microsoft账户登录”的选项,并且添加了上述的Graph API权限(个人账号授权时会自动同意,不需要管理员审核)。
备注:内容来源于stack exchange,提问作者V.J
相关产品推荐
相关产品推荐

