【问题标题】:How to determine authentication method while using Google Cloud Platform client libraries locally如何在本地使用 Google Cloud Platform 客户端库时确定身份验证方法
【发布时间】:2018-01-30 17:28:46
【问题描述】:

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

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

"Authenticating to the Cloud Vision API"...包括上述页面的"Application Default Credentials"部分

"Authenticating Applications With a Client Library" 为实例创建和启用服务帐户部分

"Providing Credentials to Your Application"“为服务器到服务器生产能力设置身份验证”页面的部分

"Setting the Environment Variable"“认证入门”页面部分:

Python 客户端库"Getting Started" 页面:

"Authenticating to a Cloud API Service"

【问题讨论】:

    标签: python authentication google-cloud-platform gcloud-python vision-api


    【解决方案1】:

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

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

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

    以上信息可以在readthedocs.io page for the google-cloud Authentication page上找到,更具体的可以在google.auth package page上找到

    您可以通过运行此command 来检查您是否设置了应用程序默认凭据:

    gcloud auth application-default print-access-token 
    

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

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

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

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

    【讨论】:

    • 是否仍然无法实际显示正在使用的身份验证,而不仅仅是猜测/消除?
    • 不是 AFAIK,但这不是你应该关心的事情。如果您确实关心,请明确使用#1。它将在#2 之前使用。
    • 实际上更好的方法是在代码中设置显式身份验证,按照auth docs
    猜你喜欢
    • 2023-03-08
    • 2018-09-14
    • 2017-09-23
    • 1970-01-01
    • 2019-01-10
    • 2019-11-06
    • 2020-10-25
    • 2021-09-18
    • 1970-01-01
    相关资源
    最近更新 更多