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

Office插件SSO问题:能否让getAccessToken同时请求API权限?

解决方案:Excel插件getAccessToken请求额外API权限

核心限制说明

OfficeRuntime.auth.getAccessToken()的设计逻辑不支持直接在授权弹窗中请求自定义API的权限。它的核心作用是通过Office应用作为中间层,获取仅针对插件自身的访问令牌——这也是官方文档提到它不能直接返回MS Graph令牌、必须通过On-Behalf-Of(OBO)流间接访问的原因,和MSAL直接代表Web应用发起授权的流程完全不同。

为什么Manifest的<Scope>标签没生效?

Manifest里的<Scope>标签仅用于声明插件需要的Office功能权限(比如读写Excel数据、访问文档内容等),作用是给Office客户端和应用商店识别插件的功能边界,和Azure AD的OAuth授权流程无关。因此添加自定义API的权限范围不会对getAccessToken的授权弹窗产生任何影响。

可行解决方案

方案1:通过On-Behalf-Of(OBO)流间接获取API令牌

这是官方推荐的适配方案,流程如下:

  1. 调用OfficeRuntime.auth.getAccessToken()获取插件的访问令牌(该令牌已包含对插件Web应用的授权);
  2. 在你的后端服务中,将此令牌作为凭证,向Azure AD发起OBO流请求,换取自定义API的访问令牌;
  3. 由后端使用API令牌调用目标接口获取用户资料,或后端代理API请求(不建议直接将API令牌返回给前端)。

方案2:保留MSAL作为补充方案

既然你已验证MSAL可同时请求Web应用和API的权限,可做兼容逻辑:

  • 优先用getAccessToken()完成基础登录,当需要访问额外API时,触发MSAL的授权流程补充请求API权限;
  • 或在需要访问API的场景下直接切换到MSAL流程,让用户一次性完成所有权限同意。

方案3:企业租户预授权(仅限内部场景)

如果插件面向企业内部Azure AD租户用户,可让租户管理员提前为插件的服务主体授予自定义API的权限。这样用户使用getAccessToken()时,后台会自动包含API授权,无需用户手动同意。

关键注意事项

  • 不要尝试绕过getAccessToken的限制直接获取API令牌,这违反Office插件安全规范,可能导致审核不通过;
  • OBO流要求你的后端服务已在Azure AD中完成注册,并配置了自定义API的委托权限;
  • 使用MSAL时需注意和Office的身份状态同步,避免重复登录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:55:20