OAuth2身份验证js客户端

时间:2017-03-13 20:49:22

标签: javascript oauth-2.0 outlook-addin office-addins outlook-web-app

我正在开发一个outlook addin。它基于JS,使用OAuth2对用户进行身份验证。我正在使用poupp窗口打开授权页面,如google,azure ......并且在成功登录后我将其关闭。要返回应用程序,我在弹出窗口的父窗口上注册了一个回调函数,可以通过window.opener属性访问。一切都很好,但我想支持移动设备。 要通过OWA for Devices应用程序运行这种插件,可以通过Play商店下载。 问题是window.opener属性始终为null。所以我不能回电话申请。 有没有其他方法如何回调应用程序?如何访问弹出窗口的父窗口?

1 个答案:

答案 0 :(得分:1)

解决该问题的正确方法是通过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个组件:

  1. 使用特定数据侦听凭证套接字的加载项Javascript(可以是cookie guid或电子邮件地址等唯一值)
  2. 在OAuth完成后您将被重定向的网页,该网页将通过套接字将凭据(访问令牌/刷新令牌)传递给服务器。 (您仍然可以将此作为使用您的加载项部署的页面来托管,这里重要的是它应该有一个单独的JS文件)
  3. 服务器套接字,它将获取凭据并将其传递给加载项客户端。