getAccessTokenAsync returns 13001

getAccessTokenAsync returns 13001

成功上传清单后,我现在正在努力使用 Office JS API 获取访问令牌。我已经关注 the instructions 但到目前为止运气不好。

我收到的错误是 13001 - the user is not signed in Office。但是很明显,我已登录 Office 365,因为我 运行 从 Outlook Online 加载项。

代码:

function showDialog() {
    getDataWithToken({ forceConsent: false });


    Office.context.ui.displayDialogAsync('https://localhost:3000/PluginApp/index.html',
    { height: 80, width: 80, displayInIframe: true}, function(asyncResult) {
        // ... code
    });

    function getDataWithToken(options) {
        Office.context.auth.getAccessTokenAsync(options,
        function (result) {
            debugger;
            if (result.status === "succeeded") {
                //TODO1: Use the access token to get Microsoft Graph data.
            }
            else {
                handleClientSideErrors(result);
            }
        });
    }

    function handleClientSideErrors(result) {

        switch (result.error.code) {

            case 13001:
                getDataWithToken({ forceAddAccount: true });
                break;
        }
    }

打印以下屏幕:

其他答案:

2) 在我的清单文件中,我已将 ExecuteFunction 定义为 运行 用户单击插件时的方法。我没有使用任务窗格,因为宽度太小了。我想打开一个对话框以使用更多 space 来渲染内容。因此,我无法在打开对话框之前获取信息,因为我可能正在获取敏感信息,这就是为什么整个代码都在打开对话框之后的原因。

3) 我公司使用主 Office 365 帐户。设置是混合的(本地 AD 和云邮箱。数据通过 DirSync 同步)。

  1. 嗯嗯。产品团队报告说 13001 永远不应出现在 Office Online 中。我会尝试确认这一点。

  2. 您似乎在主要用于打开对话框的方法中调用 getAccessTokenAsync。你能解释一下为什么吗?您无需创建对话框即可使用 API。您从任务窗格调用 API,如果用户未登录,Office 本身将打开一个登录对话框。

  3. 此外,使用 Microsoft 帐户登录的用户可以访问 Office Online,因此您使用它并不能确保您登录的是 Office 365 帐户。您使用的是 Office 365 帐户还是 MSA 帐户?

  4. 如果您还没有,请查看:Troubleshoot SSO in Add-ins

我不知道这是否是一个修复,但我已经拼命按下所有复选框(在 portal.azure.com -> Azure Active Directory -> 注册应用程序 -> myapp),我现在遇到了一个不同的错误.