0

我正在使用 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)

谢谢

4

1 回答 1

2

最好的方法可能是 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 联系人),但听起来你不需要那样。

于 2012-05-28T18:26:02.473 回答