我有一个基本的网络应用,我使用的是Google OAUTH流程。 Web应用程序导航到/oauth
,触发oauth流。授权服务器然后将客户端重定向到/oauth2callback
。我在本地尝试它,第一步工作正常。服务器能够将客户端重定向到谷歌的授权服务器,并接收旨在交换访问令牌的code
。但是,当我尝试使用code
交换flow.step2_exchange
时,http请求会挂起很长时间。通常请求超时。偶尔我会得到一个有效访问令牌的回复,这让我相信逻辑(一般来说)是合理的。
是否有人知道谷歌可能会将响应延迟30秒或更长时间?难道谷歌会限制开发请求吗?有没有人遇到过这样的事情?有什么我做错了吗?我应该注意到,我目前正在使用谷歌自己的oauth2库,但我已经尝试手动构建http请求,但也没有帮助。它仍然挂在https://accounts.google.com/o/oauth2/token
上。
这是oauth流程的烧瓶代码:
from oauth2client.client import OAuth2WebServerFlow
@app.route('/oauth', methods=['GET'])
def oauth():
print "oauth called: "
flow = OAuth2WebServerFlow(
client_id=config.GOOGLE_OAUTH_CLIENT_ID,
client_secret=config.GOOGLE_OAUTH_CLIENT_SECRET,
scope='https://www.googleapis.com/auth/userinfo.email',
redirect_uri='http://localhost:6060/oauth2callback')
auth_uri = flow.step1_get_authorize_url()
return redirect(auth_uri)
@app.route('/oauth2callback', methods=["GET"])
def oauth_callback():
code = request.args['code']
flow = OAuth2WebServerFlow(
client_id=config.GOOGLE_OAUTH_CLIENT_ID,
client_secret=config.GOOGLE_OAUTH_CLIENT_SECRET,
scope='https://www.googleapis.com/auth/userinfo.email',
redirect_uri='http://localhost:6060/oauth2callback')
credentials = flow.step2_exchange(code)