Ron*_*het 4 python google-app-engine google-api oauth-2.0 google-api-python-client
这篇文章是如何在GAE cron工作中执行OAuth要求操作的后续内容?,我意识到我错误地使用了@oauth_required装饰器OAuth2DecoratorFromClientSecrets.
正如OAuth 2.0解释的演示文稿所述,Oauth 2.0解决了以下问题:
这就是@oauth_required摘要,它做得很好(目前我的应用程序"有效":如果我触发刷新页面,我会被要求授权访问我的YouTube数据到我的应用程序,其余部分如下).但那不是我想要的!我的应用程序做了一些更简单的事情,即每天使用我的凭据创建一个youtube播放列表,无需任何用户输入.因此,为了与上述3层联想进行比较,我希望:
但我仍然需要帮助才能做到这一点; 这是我目前的状态:
经过几次搜索后,我了解到我想要做的就是称为离线访问(强调我的,这几乎就是我的用例):
"在某些情况下,当用户不在时,您的应用程序可能需要访问Google API.这方面的例子包括备份服务和应用程序,这些应用程序在周一早上8点正好发布博客帖子.这种访问方式称为脱机,Web服务器应用程序可以请求用户进行脱机访问.正常和默认的访问方式称为在线. " ...
→所以我应该继续做我现在正在做的事情,继续请求访问我的YouTube帐户,但是使用type_access=offline标志来获取令牌,并持续/使用它来进行后续请求.
该脱机访问和 使用刷新令牌部分使总感觉,但停留在一般的HTTP水平.作为一个新手,我不知道如何将这些原则集成到我的Python代码中,我没有找到任何示例Python代码....
→任何人都可以帮我一个Python示例说明如何以及在何处使用这面旗帜?
...特别是在学习之后oauth2client.appengine.OAuth2Decorator.oauth_required,我仍然不确定我是否可以将它弯曲到我的情况,或者我是否应该做自己的事情.
→你怎么看?
谢谢你的时间; 如果需要我也会在irc://irc.freenode.net/#appengine上闲逛ronj.
检索令牌时,脱机访问是默认设置 ; 您可能已经在出现的OAuth对话框中注意到了这一点:
我不使用应用程序时执行这些操作
当您的用户接受OAuth对话框时,使用decorator.oauth_required该用户的凭据修饰的方法将存储在数据存储区中,包括刷新令牌.
一旦有了这些凭证对象之一,就可以使用它来授权HTTP对象来调用APIS:
import httplib2
http = credentials.authorize(httplib2.Http())
Run Code Online (Sandbox Code Playgroud)
一旦获得授权,它将为您完成所有工作.因此,如果access_token过期,则第一个API响应将是a 401,因此credentials对象将使用它refresh_token来获取新的access_token并再次发出请求.
如果您知道用户ID,则可以credentials按照如何在GAE任务队列中执行OAuth要求的操作中的描述从数据存储中检索?:
from oauth2client.appengine import CredentialsModel
from oauth2client.appengine import StorageByKeyName
credentials = StorageByKeyName(
CredentialsModel, user_id, 'credentials').get()
Run Code Online (Sandbox Code Playgroud)
如果用户已经授权您的客户端ID,则随后您为这些用户执行OAuth时,他们将看不到OAuth对话框,并且您将不会获得刷新令牌.刷新令牌只有在通过OAuth对话框时才能给出,但由于用户已经授权了您的客户端ID,因此规范假定您已经拥有刷新令牌.
这通常在开发人员测试OAuth时出现,因为他们将使用测试帐户多次通过流程,并且在接受第2,第3,第4 ......次之后,他们永远不会看到刷新令牌.解决这个问题的一个简单方法是使用构造函数approval_prompt=force作为参数OAuth2Decorator.这将强制每次为用户执行OAuth时都会显示OAuth对话框.
但是,这不会导致每次为给定用户提供请求时都显示对话框; 这将是一个可怕的用户体验.相反,SACSID可以使用来自请求的cookie(由客户端库和一些App Engine库)来确定当前用户是谁.一旦库知道当前用户,它就可以从数据存储区获取现有的存储令牌/ credentials用户,并且不需要任何震动对话框.
| 归档时间: |
|
| 查看次数: |
4014 次 |
| 最近记录: |