最好的方法可能是 HTML5 postMessage。
window.opener
但是,在我的 OAuth 2.0 入门书(由 O'Reilly 出版)中,我有一个使用标准 JavaScript 的可行方法。这在最近的浏览器中运行良好:
我有一个页面叫做oauth2callback.html
. 此页面是您的redirect_uri
. 它从 URL 中的哈希片段中解析出访问令牌#
,调用 JS 函数window.opener
来设置访问令牌,然后自行关闭:
<html>
<body>
<script type="text/javascript">
var oauthParams = {};
// parse the query string
// from http://oauthssodemo.appspot.com/step/2
var params = {}, queryString = location.hash.substring(1),
regex = /([^&=]+)=([^&]*)/g, m;
while (m = regex.exec(queryString)) {
oauthParams[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
}
window.opener.setOauthParams(oauthParams);
window.opener.callApi();
window.close();
</script>
</body>
</html>
父页面(通过在弹出窗口中打开 OAuth 流来启动整个过程)有一个简单的 JavaScript 函数setOauthParams
,它接受参数并将它们存储在全局变量中:
function setOauthParams(oauthParamsPassed) {
this.oauthParams = oauthParamsPassed;
}
我还有其他代码可以启动 OAuth 流程并使用 jQuery 调用 API(在我的例子中是 Google 联系人),但听起来你不需要那样。