0

我正在建立一个网站作为 OAuth 2.0 提供者,就像 Facebook 和 Twitter。这两个网站都允许您通过一个按钮“使用 Facebook/Twitter 登录”,该按钮会打开一个身份验证对话框。用户登录后,该框将关闭,请求页面现在具有访问令牌。他们如何以不违反跨域策略的方式做到这一点?

似乎 Facebook JS SDK 是从他们的服务器加载的,这是故意绕过 x 域限制吗?

另外,父窗口在什么时候收到访问令牌?是孩子送的还是家长拿的?

谢谢

4

1 回答 1

1

这是通过将值从子寡妇传递到父窗口来完成的。父窗口打开的每个子窗口都引用了其父窗口,可以通过以下方式访问:

var parent = window.opener.document.document; // by this you have reference to parent DOM
var someParentElement = parent.getElementById("idOfParentDomElement"); // ex: accessing particular element on parent

因此,您可以通过访问父级将值传递给父级:

var childDiv = document.getElemntById("SomeChildDiv").innerHTML;
someParentElement.innerHTML = childDiv // passing html text to parent div

在此处阅读有关此的更多信息

接收访问令牌是OAuth 流程的一部分。通过oauth令牌被接收并传递给父窗口window.opener,然后window.close由父窗口调用以关闭窗口。在此父级使用访问令牌之后。

编辑:评论后:

Facebook 使用 postMessage、iframe 或 flash 功能来处理依赖于浏览器的跨域消息传递。它包括all.js哪个是处理消息之间的关键文件。您可以在此处阅读有关其机制的更多信息

于 2013-09-07T17:08:11.743 回答