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

已授予权限时调用Microsoft Graph API返回401未授权错误如何解决

问题排查与解决方案

根因定位

你Postman返回的InvalidAuthenticationToken错误中明确提示Invalid audience,直接指向核心问题:你申请的访问令牌的目标服务和实际调用的服务不匹配。
你代码中存在两处关联错误:

  • 请求令牌时指定的resource参数值为https://graph.windows.net,这是已废弃的Azure AD Graph服务的资源标识,但你后续实际调用的是新版Microsoft Graph接口https://graph.microsoft.com,两者受众完全不匹配,导致接口校验令牌失败返回401。
  • 你使用的是Azure AD v1版本的令牌端点(/oauth2/token),该版本端点中scope参数不会生效,仅resource参数决定令牌的受众,因此你传入的scope=https://graph.microsoft.com/.default不会修正受众错误。

修复步骤

1. 修正令牌请求参数

将代码中resource参数的值替换为实际调用的Microsoft Graph服务标识:

// 原代码
// let resource = 'https://graph.windows.net'
// 修改后
let resource = 'https://graph.microsoft.com'

修改后重新请求令牌,即可获得受众为Microsoft Graph的有效访问令牌。

2. 可选优化(建议)

新开发场景建议直接使用Microsoft Identity平台v2版本令牌端点,不需要传resource参数,仅靠scope参数即可指定受众,请求地址修改为:

const endpoint = 'https://login.microsoftonline.com/<my-tenant-id>/oauth2/v2.0/token'

对应请求参数中移除resource字段即可。

3. 权限校验补充

你使用的是客户端凭据流,需确认应用权限配置符合要求:

  • 需在Azure门户应用注册的「API权限」页,为应用授予应用权限类型的User.Read.All,委托权限类型的User.Read/User.Read.All不适用于客户端凭据流
  • 权限配置完成后必须点击「授予<租户名>的管理员同意」,权限才会实际生效

4. 额外代码问题修正

你调用用户信息接口的代码中,axios返回对象的解构写法有误,会导致拿不到用户数据,修正为:

// 原代码
// const { adUserInfo } = await axios({...})
// 修改后
const { data: adUserInfo } = await axios({
  url: 'https://graph.microsoft.com/v1.0/users/12345-67890-123456-123456-123456',
  method: 'get',
  headers: {
    Authorization: `Bearer ${accessToken}`,
  },
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:57:03