我正在建立一个OAuth 2.0提供商网站,就像Facebook和Twitter一样。这两个站点都可以通过按钮“登录Facebook / Twitter”,打开一个auth对话框。用户登录后,该框将关闭,请求页面现在具有访问令牌。 他们如何以不违反跨域政策的方式执行此操作?
似乎Facebook JS SDK是从他们的服务器加载的,这是否有意绕过x-domain限制?
此外,父窗口收到的访问令牌在什么时候?是由孩子发送还是由父母提取?
由于
答案 0 :(得分: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
详细了解此here
接收访问令牌是OAuth flow的一部分。通过oauth收到令牌并通过window.opener
传递给父窗口,然后由父窗口调用window.close
关闭窗口。此父级使用Access Token后。
编辑:评论后:
Facebook使用postMessage,iframe或flash功能来处理依赖于浏览器的跨域消息传递。它包括all.js
,它是处理消息之间的密钥文件。您可以阅读有关其机制here