关闭窗口,登录后重定向到旧页面[客户端程序]

时间:2012-05-28 09:43:45

标签: api redirect youtube oauth-2.0 client-side

我正在使用youtube api,因此使用Oauth 2.0进行客户端授权。

  

https://developers.google.com/youtube/2.0/developers_guide_protocol_oauth2#OAuth2_Client_Side_Web_Applications_Flow

点击登录时会打开一个用于授权google oauth 2.0的新窗口并被重定向,它会在新窗口中打开重定向的Url(用于授权),登录后如何成功或失败,我关闭登录窗口并使用令牌和结果返回原始站点。

如果您要建议一个会话变量来实现这一点,我认为使用客户端编程方法是不可能的。

我需要一个类似的登录/授权方法:

  

http://gdata-samples.googlecode.com/svn/trunk/gdata/youtube_upload_cors.html   我试图解密代码,但是它很有效。

我更喜欢客户端方法,因为我打算处理的事情纯粹是客户端驱动的(JS)

由于

1 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法可能是HTML5 postMessage。

但是,我在 OAuth 2.0入门一书(由O'Reilly出版)中使用标准JavaScript和window.opener这是一种可行的方法。这在最近的浏览器中工作正常:

我有一个名为oauth2callback.html的网页。此页面是您的redirect_uri。它从URL中的#哈希片段中解析访问令牌,调用window.opener中的JS函数来设置访问令牌,然后自行关闭:

<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流程启动整个过程)有一个名为setOauthParams的简单JavaScript函数,它接受参数并将它们存储在全局变量中:

function setOauthParams(oauthParamsPassed) {
  this.oauthParams = oauthParamsPassed;
}   

我还有其他代码可以启动OAuth流程并使用jQuery来调用API(在我的情况下是Google Contacts),但听起来并不像你需要的那样。