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

调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:34:29