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

Office JS API获取AccessToken报错13001问题求助

解决Office JS获取AccessToken时报13001(用户未登录)的问题

我来帮你捋捋这个问题哈,结合你的代码和混合AD架构的场景,主要有几个核心问题需要调整:

1. 对话框与主加载项的上下文不共享

你现在是在主加载项的ExecuteFunction上下文里调用getAccessTokenAsync,但后续打开的对话框是独立的iframe上下文——这俩的登录状态是完全分开的!而且你说所有敏感操作都要在对话框里执行,那根本不该在主加载项里提前调用token获取逻辑,应该把getDataWithToken移到对话框页面的代码里,让对话框自己初始化Office并获取token,主加载项只负责打开对话框就行。

2. 混合AD架构的身份验证适配

你们用的是本地AD同步到云的混合架构,这种场景下Office JS的auth模块容易出现身份源识别混乱的问题。你可以在调用getAccessTokenAsync时,强制指定租户ID的权限验证地址,避免自动检测出错:

getDataWithToken({ 
  forceConsent: false,
  authority: "https://login.microsoftonline.com/你的租户ID"
});

把你的租户ID换成你们公司Azure AD的实际租户ID,这样就能让验证流程精准指向你们的混合身份体系。

3. 错误处理逻辑要对应上下文

你当前收到13001错误时,是在主加载项上下文里调用forceAddAccount: true,但这根本解决不了对话框的登录问题!得把错误处理移到对话框内部——当对话框里的getAccessTokenAsync报错时,再在对话框的上下文里触发添加账户操作,这样才能让对话框获取到正确的登录状态。

4. 调整后的代码示例

主加载项的showDialog函数(仅负责打开对话框)

function showDialog() {
  Office.context.ui.displayDialogAsync('https://localhost:3000/PluginApp/index.html', { height: 80, width: 80, displayInIframe: true}, function(asyncResult) {
    if (asyncResult.status === "succeeded") {
      const dialog = asyncResult.value;
      // 可选:监听对话框的消息回调
      dialog.addEventHandler(Office.EventType.DialogMessageReceived, function(args) {
        console.log("从对话框收到数据:", args.message);
      });
    } else {
      console.error("打开对话框失败:", asyncResult.error.message);
    }
  });
}

对话框页面的脚本(负责初始化和获取token)

// 对话框加载完成后先初始化Office
Office.initialize = function() {
  getDataWithToken({ forceConsent: false });
};

function getDataWithToken(options) {
  Office.context.auth.getAccessTokenAsync(options, function (result) {
    if (result.status === "succeeded") {
      // 在这里调用Microsoft Graph获取敏感数据
      console.log("成功获取AccessToken:", result.value);
    } else {
      handleDialogErrors(result);
    }
  });
}

function handleDialogErrors(result) {
  switch (result.error.code) {
    case 13001:
      // 在对话框上下文里触发添加账户操作
      getDataWithToken({ forceAddAccount: true });
      break;
    default:
      console.error("Token获取失败:", result.error.message);
  }
}

额外检查点

  • 确保manifest里的WebApplicationInfo配置正确:Client ID、权限范围(比如Mail.Read、User.Read)都要和Azure AD里注册的加载项一致,且已经完成权限授予。
  • 混合架构下,确认本地AD同步到云的用户UPN(用户主体名称)和Outlook Online登录的账户完全匹配,否则会出现身份验证不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:57:00