如何在我的服务器中存储/使用自己帐户的访问令牌?

时间:2013-11-22 07:19:04

标签: python google-app-engine google-cloud-storage

我将使用Google Cloud Storage JSON API,该应用只会使用我的云存储项目,而不是个人用户'。如何获取访问令牌/ api密钥,以便我可以向我的云存储项目发出请求,而无需担心来自AppEngine的过期令牌等?

我看到有一个"服务器密钥"在云端控制台中输入,但我不确定它的用途。

我知道"激活"我的AppEngine项目与Google Cloud项目(令人困惑的上帝)实现我想要的目标,但不幸的是,我的AppEngine项目已经被激活了#34;到另一个Google Cloud项目(没有启用云端存储),Google Cloud项目已经与另一个AppEngine项目相关联(wat?)。

另外,我如何使用这个" api键"在我的请求通过包装库?因为所有在线样本都是通过OAuth2完成的,并且使用用户的访问令牌签署请求。 (我不认为包装器库甚至支持非OAuth2请求吗?)

1 个答案:

答案 0 :(得分:4)

您的AppEngine项目有一个与之关联的服务帐户。该帐户可以被授予第二个项目的成员资格。

要查找服务帐户的名称,请转到AppEngine控制台(https://appengine.google.com)并选择您的AppEngine项目。在“应用程序设置”选项卡下,您将看到一个"服务帐户名称"看起来像是一个电子邮件地址。

现在转到云端控制台(https://cloud.google.com/console),然后选择第二个项目,即您用于此Google云端存储的项目。当您在那里时,请确保您已为Google云端存储(以及JSON版本)启用了该功能,并且您已设置了结算信息。

在"权限"下,您会看到一个电子邮件地址列表。点击"添加会员"并放入我们之前在AppEngine控制台中找到的地址。根据您的AppEngine应用程序需要执行的操作,在所有者,编辑者或查看者之间进行选择。

或者,您可以仅为其需要使用的存储桶或对象授予权限,而不是将该帐户添加到项目本身。

当您调用Google Cloud Storage JSON API时,您可以指定要在build()函数中用作关键字参数的API密钥。您可以使用任一API密钥。

为了获得调用JSON API的凭据,您很可能希望使用AppAssertionsCredentials,如下所示:https://developers.google.com/api-client-library/python/guide/google_app_engine#ServiceAccounts

import httplib2
from google.appengine.api import memcache
from oauth2client.appengine import AppAssertionCredentials
from apiclient import discovery
...
credentials = AppAssertionCredentials(scope='https://www.googleapis.com/auth/devstorage.read_write')
http = credentials.authorize(httplib2.Http(memcache))
storage = discovery.build(serviceName='storage', version='v1beta2', http=http, developerKey=your_api_key)

另请注意,除了JSON API之外,还有一个用于访问Google云端存储的AppEngine特定Python库:https://developers.google.com/appengine/docs/python/googlecloudstorageclient/