2

我正在关注office-js-helpers以启用 SSO 登录,然后使用访问令牌调用 Graph API。

但是,即使我在 manifest.xml 中添加,身份验证也会在新选项卡中打开登录窗口

<AppDomain>https://login.windows.net</AppDomain>
<AppDomain>https://login.microsoftonline.com</AppDomain>

当前结果。
在此处输入图像描述

编辑:
对于 SSO 登录,是否应该在 Outlook 加载项中重定向而不是打开新的 Web 浏览器窗口?

这是演示项目OutlookOneDriveGraphAddIn

我想在我的 Outlook Web 插件中启用图形 API,图形 API 需要登录过程,我希望能够在我的 Web 插件中请求访问令牌。

如果有任何不清楚的地方,请告诉我。

4

2 回答 2

3

这里有2个问题。

问题 #1:对于 SSO 登录,是否应该在 Outlook 加载项中重定向而不是打开新的 Web 浏览器窗口?

它不应在 Office 加载项中重定向,原因很简单,因为这违反了 OAuth。使用 OAuth 身份验证,您必须向用户显示 URL - 否则您可以在加载项中欺骗看起来类似于 Microsoft 登录的 UI 并窃取人们的凭据。显然这是不安全的。因此,当您调用它时getAccessTokenAsync,如果用户未登录,它应该会弹出一个对话框。登录由 Microsoft 处理,之后,令牌通过相同的方法变得可用getAccessTokenAsync

问题 #2:如何从我的加载项中获取访问令牌?

请参阅此处的文档:https ://docs.microsoft.com/en-us/office/dev/add-ins/develop/sso-in-office-add-ins#add-client-side-code

Office.context.auth.getAccessTokenAsync(function (result) {
    if (result.status === "succeeded") {
        // Use this token to call Web API
        var ssoToken = result.value;
        ...
    } else {
        if (result.error.code === 13003) {
            // SSO is not supported for domain user accounts, only
            // work or school (Office 365) or Microsoft Account IDs.
        } else {
            // Handle error
        }
    }
});
于 2019-03-21T20:59:34.187 回答
0

嘿,我遇到了同样的问题。我还在开发一个 Outlook 插件,它需要访问令牌才能从 GraphAPI 请求资源。经过长时间的搜索,我找到了最好的方法,并完成了我的插件的实现。

在没有用户的情况下尝试访问令牌中的步骤。我所做的方式是使用 nodejs 中间件进行身份验证及其工作。现在我可以使用它访问大部分 GraphApi 资源。希望这可以帮助。

请注意,使用此方法您应该启用 Application Permissions,而不是委托。

于 2019-03-20T07:12:54.377 回答