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

Outlook Add-In经后端API调用MS Graph遇AADSTS65001权限错误求助

解决Outlook Add-In On-Behalf-Of流程中AADSTS65001权限同意错误

核心问题

AADSTS65001错误的本质是:你的后端API应用未获得用户或管理员对目标Microsoft Graph权限的同意,即便你在Azure AD中配置了权限,也必须完成对应的同意流程才能让OBO令牌转换生效。

具体解决方案

1. 核对Azure AD应用权限配置

  • 后端API应用(注意不是Outlook Add-In的注册应用)必须添加Delegated类型的Graph权限(比如你需要的Mail.Read),并且完成同意操作:
    • 企业环境建议由管理员执行全局管理员同意,避免每个用户重复操作;
    • 测试环境可使用个人账号完成用户同意,前提是租户允许用户自行同意应用权限。
  • 区分开Add-In应用和后端API应用的权限:Add-In的权限用于获取用户令牌,后端API的权限才是OBO流程中调用Graph的依据,两者不能混用。

2. 修正OBO请求的Scope参数格式

你当前请求中的Scope用+分隔权限,应该改成空格分隔的标准格式:

{ "scope", "https://graph.microsoft.com/Mail.Read offline_access" },

虽然+在Form编码中会被转义为空格,但直接使用空格更规范,能避免潜在的解析异常。

3. 验证Add-In获取的用户令牌权限

用jwt.ms解码Add-In拿到的用户令牌,检查scp字段是否包含Mail.Read相关权限。如果没有,需要:

  • 在Add-In的Azure注册应用中添加对应的Delegated Graph权限;
  • 确保用户已经完成对Add-In应用的权限同意(可通过重新触发Add-In的SSO流程完成)。

4. 补充交互式同意的 fallback 逻辑

当OBO请求返回AADSTS65001时,说明用户未同意权限,需在Add-In中触发交互式同意:

  • 在handleSSOErrors函数中捕获该错误,调用Office.context.ui.displayDialogAsync打开后端的权限同意页面,或直接引导用户完成Graph授权流程;
  • 同意完成后,重新获取用户令牌再传递给后端重试。

5. 检查OBO请求参数的正确性

逐一确认以下参数:

  • grant_type:urn:ietf:params:oauth:grant-type:jwt-bearer是正确的,无需修改;
  • assertion:确保传递的是Add-In获取到的完整用户令牌(你用的userAccessInfo.Token.RawData是正确的);
  • tenantId:如果是多租户应用,建议用common替代固定租户ID,除非你明确只针对单个租户;
  • client_id和client_secret:必须是后端API应用的ID和密钥,不要误用Add-In的应用信息。

6. 手动测试权限同意流程

构造授权URL,手动完成同意操作后再测试OBO流程:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=你的后端API应用ID&response_type=code&redirect_uri=你的后端API回调URI&scope=https://graph.microsoft.com/Mail.Read offline_access&prompt=consent

用浏览器打开该URL,登录目标用户并完成权限同意,之后再发起OBO请求验证是否成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:10:27