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

在Angular开发的Office.js插件中真的无法使用Microsoft访问令牌吗?

Office插件Microsoft身份验证可行解决方案

方案1:优先使用官方Office SSO(Office.auth.getAccessToken),解决类型识别与编译问题

  • 首先更新Office.js类型包到最新正式版,执行命令:
    npm install @types/office-js@latest --save-dev
    
    1.0.250及以上版本的类型包已经正式包含Office.auth.getAccessToken的完整类型定义,可解决TypeScript编译报错与智能提示缺失问题。如果更新后仍有识别异常,在项目的全局类型声明文件(如global.d.ts)中补充兜底声明即可:
    declare global {
      interface Window {
        Office: typeof Office & {
          auth: {
            getAccessToken: (options?: {
              allowSignInPrompt?: boolean;
              allowConsentPrompt?: boolean;
              forMSGraphAccess?: boolean;
            }) => Promise<string>;
          };
        };
      }
    }
    
  • 必须在插件的manifest.xml中正确配置WebApplicationInfo节点,填写对应的Azure AD应用客户端ID、资源URI、所需权限范围,这是SSO接口能正常返回令牌的核心前提。
  • 调用时补充错误捕获逻辑,当SSO因用户未登录、租户权限限制等场景获取失败时,自动切换到下方的兜底方案。

方案2:兜底兼容方案:displayDialogAsync + MSALv2,解决跨浏览器与桌面端兼容问题

该方案经过多环境验证,可兼容Chrome、Edge、新版Safari,以及Windows、Mac端的桌面Office、网页版Office全场景:

  • 触发Office.context.ui.displayDialogAsync必须放在用户主动交互的同步回调逻辑中(比如按钮点击事件的直接回调),禁止放在异步请求、Promise回调等非同步逻辑中调用,即可避免被Safari的智能跟踪防护功能判定为恶意弹窗而拦截。
  • dialog打开的独立页面需和插件主页面同域名,在该独立页面中完整运行MSALv2的身份验证逻辑:该页面不在Office的顶层iframe中,不受iframe的安全策略限制,acquireTokenSilent、acquireTokenRedirect均可正常运行。
  • 独立页面拿到身份令牌后,不要用原生postMessage回传数据,调用Office官方提供的Office.context.ui.messageParent(令牌内容)方法回传给主插件页面,该方法已经做了跨上下文兼容处理,不会被Safari的跨域通信规则拦截。
  • 主插件页面监听dialog的消息事件,拿到令牌后关闭dialog即可正常使用令牌调用相关接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:27:04