python - 如何获取我自己帐户的访问 token 以在我的服务器中存储/使用?

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

我将使用 Google Cloud Storage JSON API ,并且该应用将仅使用我的云存储项目,而不是个人用户的云存储项目。如何获取访问 token /API key ,以便可以向我的 Cloud Storage 项目发出请求,而不必担心来自 AppEngine 的过期 token 等问题?

我看到 Cloud Console 中有一个“服务器 key ”条目,但我不确定它的用途。

我知道要通过 Google Cloud 项目“激活”我的 AppEngine 项目(这太令人困惑了)来实现我想要的目标,但不幸的是,我的 AppEngine 项目已经“激活”到了另一个 Google Cloud 项目(这并没有未启用 Cloud Storage),并且 Google Cloud 项目已与另一个 AppEngine 项目关联(什么?)。

另外,我如何通过包装库在我的请求中使用这个“api key”?由于所有在线示例都是通过 OAuth2 完成的,并使用用户的访问 token 签署请求。 (我认为包装库甚至不支持非 OAuth2 请求?)

最佳答案

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

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

现在前往云控制台 ( https://cloud.google.com/console ) 并选择第二个项目,即您用于 Google Cloud Storage 内容的项目。在那里,请确保您已为 Google Cloud Storage(以及 JSON 版本)启用它,并且已设置结算信息。

在“权限”下,您将看到电子邮件地址列表。单击“添加成员”并输入我们之前在 AppEngine 控制台中找到的地址。根据您的 AppEngine 应用需要执行的操作,在所有者、编辑者或查看者之间进行选择。

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

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

为了获取调用 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 之外,还有一个特定于 AppEngine 的 Python 库用于访问 Google Cloud Storage:https://developers.google.com/appengine/docs/python/googlecloudstorageclient/

关于python - 如何获取我自己帐户的访问 token 以在我的服务器中存储/使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20139239/

相关文章:

python - GAE/P : Serve file directly from GCS to user without reading into GAE memory

elasticsearch - 如何将 GCP 上的 Kubernetes Engine 连接到外部 Google Cloud Storage 存储桶?

node.js - 无法使用 NodeJS API 将元数据附加到 Google Cloud Storage

google-cloud-storage - 谷歌云存储客户端API无法用于补丁

python - 在 python BeautifulSoup4 中,将字符串转换为 find() 的参数

python - 如何在Pytorch中形成一个连续的数字序列?

ios - 带有iOS客户端的Google App Engine Channel API?

java - 内存不足错误: Java heap space GoogleAppEngine

基于csv文件的Python字典更新

python - 如何修复 bash 中 UTF-8 字符串的使用?