app_identity.get_access_token应该在开发环境中工作吗?

时间:2014-04-07 19:09:19

标签: google-app-engine google-api google-oauth

我使用this code从我的GAE应用中访问Google API:

scope = "https://www.googleapis.com/auth/urlshortener"
authorization_token, _ = app_identity.get_access_token(scope)

它适用于生产环境,不适用于开发环境:

Using token InvalidToken:https://www.googleapis.com/auth/urlshortener:77.5780799389 to represent identity test@localhost
('Call failed. Status code %s. Body %s', 401L, '{\n "error": {\n  "errors": [\n   {\n    "domain": "global",\n    "reason": "authError",\n    "message": "Invalid Credentials",\n    "locationType": "header",\n    "location": "Authorization"\n   }\n  ],\n  "code": 401,\n  "message": "Invalid Credentials"\n }\n}\n')

我可以应用任何解决方法(但不是从头开始实施OAuth)吗?

UPD 即可。从开发环境访问Google API的另一种方法也不起作用:

credentials = AppAssertionCredentials(scope='https://www.googleapis.com/auth/analytics.readonly')
http = credentials.authorize(httplib2.Http(memcache))
service = build('analytics', 'v3', http=http)
response = service.management().accounts().list().execute()
logging.info(response)

2 个答案:

答案 0 :(得分:3)

实际上,dev_appserver.py最近添加了一些参数,以便在本地测试期间使appidentity工作。有关详细信息,请参阅Unable to access BigQuery from local App Engine development server

答案 1 :(得分:1)

它在appspot.com上运行的原因是因为它使用自动创建的App Engine服务帐户。由于服务帐户与运行它的应用程序引擎实例相关联,因此可以保证其权限。当您在本地运行时,没有服务帐户 - 他们怎么知道您正在调试自己的应用程序而不是其他任何人?

如果你想在本地运行你的代码,你需要实现OAuth,实际上只有几行代码。