我正在开发一个 Outlook 插件。它是基于 JS 的,使用 OAuth2 来验证用户身份。我正在使用 poupp 窗口打开授权页面,例如 google、azure ...,成功登录后我将其关闭。要返回应用程序,我在弹出窗口的父窗口上注册了一个回调函数,可以通过 window.opener 属性访问该回调函数。一切工作正常,但我想支持移动设备。
可以通过 OWA for Devices 应用程序运行此类插件,该应用程序可以通过 Play 商店下载。
问题是 window.opener
属性始终为 null。所以我无法回拨应用程序。
还有其他方法可以回调应用程序吗?如何访问弹出窗口的父窗口?
最佳答案
解决该问题的正确方法是通过 WebSockets。您可以确保将凭据发布给单个客户端。在您的网络插件中,启动一个套接字
插件 - 客户端 JavaScript 应如下所示:
var socket = io('http://localhost');
var email = Office.context.mailbox.userProfile.email;
socket.on('oauth_providerName_'+email, function(data){
// Callback when you receive the credential data.
});
// Pop the user to the OAuth frame
用户从 OAuth 体验重定向回您的网站后,
网站 - 客户端 JavaScript
var socket = io('http://localhost');
var email = Office.context.mailbox.userProfile.email;
socket.emit('oauth_cred_providerName_'+email, {credentials});
服务器 - 根据您选择的语言,您可以通过套接字将凭据数据传递到外接程序客户端。
所以理想情况下你这里有 3 个组件:
- 插件 Javascript,用于监听具有特定数据的凭证套接字(可以是 cookie guid 或电子邮件地址等唯一值)
- OAuth 完成后您将重定向的网页,它将通过套接字将凭据(访问 token /刷新 token )传递到服务器。 (您仍然可以将其托管为与您的加载项一起部署的页面,这里重要的是它应该有一个单独的 JS 文件)
- 服务器套接字,它将获取凭据并将其传递给加载项客户端。
关于javascript - OAuth2认证js客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42773148/