【问题标题】:Outlook web add-in calling Microsoft GraphOutlook Web 加载项调用 Microsoft Graph
【发布时间】:2019-03-15 09:56:11
【问题描述】:

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

但是,Authentication 将在新选项卡中打开登录窗口,即使我已在 manifest.xml 中添加

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

当前结果。

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

这里是演示项目OutlookOneDriveGraphAddIn

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

如果有什么不清楚的地方,请告诉我。

【问题讨论】:

  • 这里没有问题 - 或可重现的代码。
  • 我们可以更好地帮助您,如果您能解释您想要达到的目标以及您面临的问题是什么。另外,请尽可能添加一些代码,以便我们可以重现该问题。
  • @MaviDomates 请检查更新。
  • @OutlookAdd-insTeam-MSFT 请检查更新。我要实现Create an ASP.NET Office Add-in that uses single sign-on (preview)
  • 对于身份验证流程,我们建议使用Office.js Dialog API。我链接到的文档部分描述了如何使用 API 来实现身份验证流程。

标签: office-js azure-ad-graph-api outlook-web-addins office-js-helpers


【解决方案1】:

这里有 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
        }
    }
});

【讨论】:

  • 您是否认为我收到了允许弹出新窗口的警报消息?如果弹出是预期的和合理的,为什么弹出窗口会出现?为什么不直接打开窗口而不显示此消息?
  • 信不信由你,这是意料之中的。原因(我知道它看起来很可怕) - 再次是一个安全功能。假设地说,如果您不警告用户来自另一个域的弹出窗口 - 他们可以将您弹出到任何恶意网站。他们确实做到了(几年前,还记得我们用来浏览网页的弹出窗口的疯狂数量吗?)相反,现在 - 只允许相同的域弹出窗口,无需额外询问。还有一种将 OAuth 与 office 插件一起使用的替代方法,但您将无法使用 SSO - 我认为这会使事情变得更容易。
  • @Edward 如果绿色勾号可以作为答案,我将不胜感激。
【解决方案2】:

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

尝试Access token without user 中的步骤。我所做的方式是使用 nodejs 中间件进行身份验证及其工作。现在我可以使用它访问大部分 GraphApi 资源。希望这会有所帮助。

请注意,使用此方法您应该启用应用程序权限,而不是委托。

【讨论】:

  • 不同的用户需要访问自己的onedrive文件。应用程序权限是否适用于这种情况?
  • 我不这么认为
猜你喜欢
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多