我们有一个独立的Java应用程序(请参阅"安装应用程序":https://developers.google.com/accounts/docs/OAuth2)的定期运行,并使用谷歌API(从客户数据库/ LDAP更新一些信息/ ...) .
要访问Google API,我们会在配置文件中存储用户名和密码,这是一种安全风险,客户不喜欢这样做.因此,我们希望使用OAuth2长期访问令牌.
Google OAuth2访问令牌的默认到期时间是什么时候?
由于我们在应用程序中只有访问令牌,因此当访问令牌到期时,应用程序本身无法刷新它...
我个人认为在这种情况下OAuth2的实现不会带来任何重大好处,但让我们关注主要问题 - 默认的到期时间.
security google-api oauth-2.0 google-api-java-client google-oauth
截至昨天,我的应用程序能够通过oAuth 2.0与google(youtube)进行身份验证,第一次没问题,但第二次(重新身份验证,相同的应用程序+同一用户),当我为accessToken交换requestToken时,我得到了一个错误:
error : invalid_grant
Run Code Online (Sandbox Code Playgroud)
我正在使用:
grant_type = authorization_code
Run Code Online (Sandbox Code Playgroud)
他们建议的.过去两天前发生的事情是重新验证,网页会说"您之前已使用此应用程序进行过身份验证,是否要再次授予其访问权限?".改变了什么或者我做错了什么?
我们的应用程序部署在Google App Engine,Python运行时(2.7)上,并且正在使用Drive API.HTTPException由于超过截止日期,在不同的端点(驱动器,OAuth等)上捕获的内容越来越多
我们已经实现了5次尝试的指数退避机制.我们的应用程序越来越多地达到了这个限制(今天早上,例如我们有很多这些例外).
这个问题可能是什么原因?是否可以增加超时延迟?
谢谢你的帮助.
这是一个完整的堆栈跟踪(OAuth2 API):
2013-06-07 21:11:10,851 ERROR An error occurred : Deadline exceeded while waiting for HTTP response from URL: https://accounts.google.com/o/oauth2/token
Traceback (most recent call last):
File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch
return method(*args, **kwargs)
File "/base/data/home/apps/s~unishared-gae/production.367909734400765242/main.py", line 733, in get
creds = self.GetCodeCredentials() or self.GetSessionCredentials()
File "/base/data/home/apps/s~unishared-gae/production.367909734400765242/main.py", line 301, in GetCodeCredentials
creds = oauth_flow.step2_exchange(code)
File "lib/oauth2client/util.py", line 128, in positional_wrapper
return wrapped(*args, **kwargs)
File "lib/oauth2client/client.py", line 1283, in step2_exchange
headers=headers)
File "lib/httplib2/__init__.py", …Run Code Online (Sandbox Code Playgroud) 这篇文章是如何在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.
python google-app-engine google-api oauth-2.0 google-api-python-client