OAuth2WebServerFlow可以从localhost运行,但不能从真正的AppEngine实例运行

时间:2014-10-27 17:52:31

标签: google-app-engine oauth oauth-2.0 google-oauth gdata

我使用OAuth2WebServerFlow获取用户的表格凭据,以便与gdata / spreadsheets API一起使用。我很难诊断问题,因为当我在本地运行应用程序时,它可以完美运行。

这是我用来获取授权网址的代码段:

CLIENT_ID = 'my-id'
CLIENT_SECRET = 'my-secret'
SCOPE = 'https://spreadsheets.google.com/feeds'
flow_object = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, SCOPE, redirect_uri=self.REDIRECT_URL, access_type='online')
authorize_url = flow_object.step1_get_authorize_url()

本地(使用REDIRECT_URL = 'http://localhost:8080/this-path/') 这会产生:

https://accounts.google.com/o/oauth2/auth?redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fthis-path%2F&scope=https%3A%2F%2Fspreadsheets.google.com%2Ffeeds&client_id=my-id&response_type=code&access_type=online

在实时App Engine应用程序上(使用REDIRECT_URL = 'http://my-app.appspot.com/this-path/') 这会产生:

https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fspreadsheets.google.com%2Ffeeds&redirect_uri=http%3A%2F%2Fmy-app.appspot.com%2Fthis-path%2F&response_type=code&client_id=my-id&access_type=online

应用程序配置如下:

CLIENT ID: my-id
EMAIL ADDRESS: my-id@developer.gserviceaccount.com
CLIENT SECRET:  my-secret
REDIRECT URIS:
    http://localhost:8080/
    http://my-app.appspot.com
    https://my-app.appspot.com
    http://my-app.appspot.com/this-path
    https://my-app.appspot.com/this-path
    http://my-app.appspot.com/this-path/
    https://my-app.appspot.com/this-path/
JAVASCRIPT ORIGINS
    http://localhost:8080
    http://my-app.appspot.com

转到本地生成的url版本,我可以成功授予应用程序权限。但是在我的实时应用程序生成的网址中,我得到了一个401,其中显示"错误:disabled_client OAuth客户端被禁用"。

我觉得它可能只是一个配置错误。也许它在本地工作的事实只是一个红鲱鱼?也许我总是能够授予localhost这些权限?我真的没有这个想法,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

在应用程序配置中,重定向网址应该与此http://localhost:8080/ oauth2callback 类似,根据我的理解 oauth2callback 在流程结束时授权令牌。请参阅文档[1]。

[1] OAUTH 2.0 https://developers.google.com/api-client-library/python/guide/aaa_oauth#OAuth2WebServerFlow