OAuth2身份验证JS客户端



我正在开发一个Outlook addin。它是基于JS的,它使用OAuth2来验证用户。我正在使用Poupp窗口打开授权页面,例如Google,Azure ...成功登录后,我将其关闭。要返回应用程序,我要在弹出窗口的父窗口上注册回调功能,该函数可通过window.opener属性访问。一切正常,但是我想支持移动设备。通过OWA可以通过for设备应用程序运行这种addin,可以通过Play Store下载。问题是window.opener属性始终为null。因此,我无法回电。还有其他方法可以回到应用程序吗?如何访问弹出窗口的父窗口?

解决该问题的正确方法是通过Websocket。您可以确保将凭据发布给单个客户端。在您的Web Addin中,启动一个插座

加载项 - 客户端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. 服务器插座,它将拿走凭据并将其传递给加载项客户端。

最新更新