Oauth:重定向网址有https,但原始网站是http

时间:2017-10-23 18:23:30

标签: javascript oauth-2.0

问题在于:

网站(部分客户以http登录,部分以https登录)= http ://www.example.com

Dropbox重定向需要 https :// www.example.com(Dropbox不允许重定向网址 http

如果我的网站 https ://www.example.com,那一切都很棒。但对于一些客户来说它是http。我可以使用redirect = https,但在用户通过弹出窗口登录后,它应该会回到我的http页面。

有任何建议怎么做?

这是我的代码:

this._oauthSignIn(url, dropboxRedirect).then(
    lang.hitch(this, function (oauthSignInUrl) {
      this._getTokenValue(oauthSignInUrl, 'access_token').then(
        lang.hitch(this, function (accessToken) {
          dfd.resolve(accessToken);
        })
      );
    })
  );

_oauthSignIn: function (url, redirect_uri) {
  var dfd = new Deferred();
  var win = window.open(url, "_blank", 'width=800, height=600');
  win.focus();
  var pollTimer = window.setInterval(function () {
    try {
      if (win.document.URL.indexOf(redirect_uri) != -1) {
        window.clearInterval(pollTimer);
        win.close();
        dfd.resolve(win.document.URL);
      }
    } catch(e) {
    }
  },100);
  return dfd;
},

_getTokenValue: function (url, name) {
  var dfd = new Deferred();
  name = name.replace(/[[]/,"\[").replace(/[]]/,"\]");
  var regexS = "[\?&#]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( url );
  if( results == null )
      dfd.resolve("");
  else
      dfd.resolve(results[1]);
  return dfd;
},

1 个答案:

答案 0 :(得分:0)

让这个工作,所以发布此用例的解决方法。

使用此示例: 客户页面:www.abc.example.com/something.html

Oauth重定向网页= www.example.com/oauthTest.html

隐藏的iframe = www.example.com/iframe.html

在客户页面上创建隐藏的iframe。调用此隐藏的iframe时会启动弹出窗口。 当用户使用dropbox点击登录时,隐藏的iframe会打开oauth弹出窗口。由于隐藏的iframe和oauth弹出窗口在同一个域上,因此工作正常,并且它们可以交叉通信。 在隐藏的iframe上获得令牌后,通过postmessage将其发送到客户页面。 现在,您可以在应用程序中使用令牌。 在iframe周围添加保护,只有您的应用程序可以调用它。