2

我目前能够运行使用python 客户端库调用 Google vision API 的本地 python 脚本(具体来说,我正在使用google-cloud-vision包)。但是,我很好奇它是如何进行身份验证的。在我在本地运行的 python 脚本中,我不提供任何身份验证信息。通过阅读以下帖子,似乎在本地运行时进行身份验证的一种常用方法是将环境变量设置为 .JSON 密钥文件(即export GOOGLE_APPLICATION_CREDENTIALS = path/to/JSON/key/file)的路径,但是,我不记得这样做了,如果我运行printenv,我没有名为 GOOGLE_APPLICATION_CREDENTIALS 的环境变量。

下面的帖子提供了有关在本地使用客户端库进行身份验证的不同方法的详细信息,但是我如何才能查看/确定我的程序是如何进行身份验证的呢?有没有办法查询这个?

“向 Cloud Vision API 进行身份验证” ...包括上述页面的“应用程序默认凭据”部分

为实例创建和启用服务帐户的“使用客户端库验证应用程序”部分

“为服务器到服务器生产功能设置身份验证”页面的“为您的应用程序提供凭据”部分

“认证入门”页面的“设置环境变量”部分:

Python 客户端库“入门”页面:

“对云 API 服务进行身份验证”

4

1 回答 1

2

有 4 种不同的方式可以在不创建凭证对象的情况下对请求进行身份验证。

  1. 如果环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为有效服务帐户 JSON 私钥文件的路径,则使用它。
  2. 如果已安装 Google Cloud SDK 并设置了应用程序默认凭据,则会使用它。请注意,如果您过去曾执行过一次此步骤,它将保持有效。(我猜这就是您当前用来进行身份验证的内容。)
  3. 如果应用程序在 App Engine 标准环境中运行,则使用来自 App Identity Service 的凭据和项目 ID。(此处不适用,但为了完整起见,我将其列出。)
  4. 如果应用程序在 Compute Engine 或 App Engine 柔性环境中运行,则从元数据服务获取凭据和项目 ID。(此处不适用,但为了完整起见,我也将其列出。)

如果使用上述方法未找到凭据,则会引发 DefaultCredentialsError。由于您没有收到此错误,并且您没有设置 #1 的环境变量,并且选项 #3 和 #4 不适用,因此唯一剩下的选项是数字 #2。

上述信息可以在 google-cloud Authentication page 的 readthedocs.io 页面上找到,更具体地说,在google.auth 包页面中

您可以通过运行以下命令检查您是否设置了应用程序默认凭据:

gcloud auth application-default print-access-token 

如果这不返回错误而是返回访问令牌,则表示设置了#2。当然不要与任何人分享这个令牌......

一些相关信息,你可以在这里查看上面的命令打印出来的token ,或者使用下面的curl命令(把token粘贴到最后):

curl -i https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=

这并不能完全回答您的问题,但通过消除过程,它应该是正确的......

于 2018-02-08T15:43:23.477 回答