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

无用户场景下调用Microsoft Graph API获取Bearer Token时遭遇404错误的求助

解决Microsoft Graph服务主体Token请求404的问题

我之前踩过一模一样的坑,先帮你把最直接的错误修正,再梳理其他需要检查的关键节点:

1. 导致404的核心原因:请求URL错误

你写的请求URL里多了HTTP/1.1,这是HTTP协议标识,不该出现在请求地址里,直接导致服务器找不到对应的资源。正确的Token端点URL应该是:
https://login.microsoftonline.com/{租户ID}/oauth2/v2.0/token

2. 第二个关键错误:请求体格式不符合要求

客户端凭证模式的Token请求必须用application/x-www-form-urlencoded格式,而不是JSON格式。你用JSON.stringify把请求体转成JSON,服务器会解析失败,哪怕URL修复了也拿不到Token。

修正后的完整可运行代码

const fetch = require('node-fetch');

// 替换成你的真实信息
const tenantId = "f8cdef31-a31e-4b4a-93e4-5f571e91255a";
const clientId = "你的CLIENT_ID";
const clientSecret = "你的CLIENT_SECRET";

const tokenUrl = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`;

// 用URLSearchParams处理表单格式的请求体,自动适配要求的编码
const body = new URLSearchParams({
  client_id: clientId,
  scope: "https://graph.microsoft.com/.default",
  client_secret: clientSecret,
  grant_type: "client_credentials"
});

fetch(tokenUrl, {
  method: "POST",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded" // 必须指定这个请求头
  },
  body: body
})
.then(response => response.json()) // 记得解析响应为JSON,不然只能拿到原始响应对象
.then(data => {
  if (data.access_token) {
    console.log("获取Token成功:", data.access_token);
    // 接下来可以用这个Token调用创建Teams会议的Graph API接口
  } else {
    console.log("获取Token失败:", data.error, data.error_description);
  }
})
.catch(err => console.error("请求出错:", err));

额外需要核对的配置项

  • 应用权限配置:你的Azure应用注册必须添加Microsoft Graph的应用权限(不是委托权限),比如OnlineMeetings.ReadWrite.All,并且必须由管理员点击「授予管理员同意」,不然哪怕拿到Token,调用创建会议接口时会返回权限不足的错误。
  • 凭证正确性:再核对一遍租户ID、客户端ID、客户端密钥,有没有复制多空格或者漏字符,尤其是客户端密钥,生成后只能查看一次,要是丢失就得重新生成。
  • node-fetch版本兼容:如果使用node-fetch v3版本,需要用import fetch from 'node-fetch',或者在package.json里添加"type": "module",否则会报错;v2版本直接用require即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:57:45