Google App Engine:使用Javascript客户端库进行OAuth2授权

时间:2013-02-19 11:25:13

标签: google-app-engine file-upload youtube-api oauth-2.0

我正在尝试用Python开发我的第一个Google App Engine应用程序,作为其中的一部分,我希望用户能够将视频上传到Youtube并与该应用的其他用户共享。根据推荐的协议,上传将是他们自己的Youtube帐户,应用程序需要捕获的唯一信息是视频ID。

我真的希望设施从应用程序内部上传,而不是将用户重定向到主Youtube网站进行上传,这样用户无需在任何时候离开应用程序,以保持无缝连接。我曾认为这会相对简单,因为它似乎是许多网站和应用程序想要提供的功能,但似乎不是。

我真的很难理解我需要经历的OAuth2流程,之前从未与之搏斗过。 Youtube API文档中唯一的上传示例代码是从您自己的计算机上传(通过命令行),因此这里不相关。我已经向后阅读了文档,并且听起来不像基于浏览器的上传工具已经针对Youtube Data Api v3进行了更新,所以我需要的第一件事就是在使用之前从用户获取访问令牌基于v2浏览器的上传协议。鉴于用户将通过浏览器上传本地存储的文件(即在他们的机器上),我假设客户端JavaScript OAuth2流是我需要的,而不是Python服务器端流。或者我需要两者吗?

问题在于我甚至无法让人们使用JavaScript客户端库从应用程序中删除我正在服务的html页面,以便将他们带到授权页面。要检查我是否了解通过JavaScript客户端库获取访问令牌的步骤,我已尝试将Google示例代码从这里剪切并粘贴到html页面中的第一步:

Google Api Javascript Client Library sample

并将Api密钥和客户端ID更改为我自己,更新了控制台和授权的Google+上的API访问窗格中的JavaScript来源,但点击按钮却什么也没做。

所以我可能误解了一些非常重要的东西!

有什么想法吗?问题是JS流程是否被Python应用程序中的流控制所覆盖?问题是我实际上应该使用服务器端流程,在这种情况下,如何让用户从他们自己的浏览器上传,然后在上传后捕获视频ID?

我无法相信我是第一个尝试这个的人,如果有人已经管理过这个或者有任何想法,我会非常感激。谢谢。

1 个答案:

答案 0 :(得分:1)

这是一个选项,如果您可以在JavaScript中完全处理客户端问题,并且您也可以将自己限制在支持CORS的浏览器中:http://apiblog.youtube.com/2012/05/unlocking-javascripts-potential-with.html那&如果您对这些限制感到满意并且您正在进行的唯一YouTube API集成是上传,那么我可能会选择这样做。

替代选项,以及可能更适合Python App Engine应用程序的选项,将使用server-side web application flow。这里的问题是您需要使用Google APIs for Python client library的组合来为您处理OAuth 2,并使用较旧的GData API Python client library来处理基于浏览器的上传流程。绝对可以将两者结合起来,我们有一篇博客文章讨论了开源Python App Engine应用程序:http://apiblog.youtube.com/2012/08/party-playlist-picker-experimental.html

正如您所指出的那样,v3目前还没有基于浏览器的上传流程。