我使用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)
答案 0 :(得分:3)
实际上,dev_appserver.py最近添加了一些参数,以便在本地测试期间使appidentity工作。有关详细信息,请参阅Unable to access BigQuery from local App Engine development server。
答案 1 :(得分:1)
它在appspot.com上运行的原因是因为它使用自动创建的App Engine服务帐户。由于服务帐户与运行它的应用程序引擎实例相关联,因此可以保证其权限。当您在本地运行时,没有服务帐户 - 他们怎么知道您正在调试自己的应用程序而不是其他任何人?
如果你想在本地运行你的代码,你需要实现OAuth,实际上只有几行代码。