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

Office 365对接Microsoft Graph时原有EWS授权Token无法访问问题

问题根因

你通过Office.context.mailbox.getCallbackTokenAsync默认获取的访问令牌,受众(aud声明)为EWS服务地址,和Microsoft Graph要求的https://graph.microsoft.com受众不匹配,所以直接复用该令牌调用Graph接口会返回401未授权错误,和你初始化GraphServiceClient的代码逻辑无关。

可行解决方案

方案1:前端直接获取Graph专属令牌(改造成本最低)

仅需调整客户端取令牌的逻辑,服务端代码无需修改:

  • 确认你的Office加载项使用的是Outlook API v1.13及以上版本,仅该版本及之后支持自定义令牌受众
  • 替换原有的令牌获取代码,显式指定受众为Graph:
Office.context.mailbox.getCallbackTokenAsync({
    authOptions: {
        audience: "https://graph.microsoft.com"
    }
}, function(result) {
    if (result.status === Office.AsyncResultStatus.Succeeded) {
        const graphAccessToken = result.value;
        // 将该令牌传递到你的Web服务端即可调用Graph接口
    }
});
  • 服务端直接使用新获取的Graph令牌初始化GraphServiceClient即可,你原有的服务端代码逻辑无需调整。

方案2:兼容低版本Outlook,使用On-Behalf-Of流兑换令牌

如果你的插件需要兼容不支持v1.13 API的低版本Outlook,可以通过令牌兑换的方式实现:

  • 首先在Azure AD应用注册中,给你的应用新增https://outlook.office365.com/user_impersonation委托权限,同时确认所需的Graph权限均已配置并完成管理员同意
  • 服务端接收客户端传递的原始EWS令牌后,向Azure AD令牌端点发起On-Behalf-Of流请求,将EWS令牌兑换为受众为https://graph.microsoft.com的访问令牌
  • 用兑换后的令牌初始化GraphServiceClient调用接口即可。

验证要点

  • 确认插件Manifest中配置的权限等级(如ReadWriteMailbox)和你调用的Graph接口所需权限匹配
  • 可以用jwt解析工具查看获取到的令牌,检查aud声明是否为https://graph.microsoft.com,且scp声明包含你需要的接口权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:45:02