如何在不使用 Gcloud 命令行的情况下获取 Google OAUTH 令牌
How to get Google OAUTH Token without using Gcloud Command Line
我目前正在使用以下代码获取 OAUTH 令牌
command = 'gcloud auth print-access-token'
result = str(subprocess.Popen(command, universal_newlines=True, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE).communicate())
结果变量具有 OAUTH 令牌。此技术使用我当前登录的 gcloud 配置。
但是,我正在寻找一种无需使用命令行即可获取 OAUTH 令牌的方法。
我正在使用此 OAUTH 令牌进行 CDAP 调用以获取 Google 数据流管道执行详细信息。
我查看了一些 google 博客。这是我认为应该尝试的方法,但它要求创建同意屏幕,并且需要一次 activity 来同意定义的范围,然后它应该可以工作。
Google Document
我是否应该按照上述文档中的步骤进行检查,或者是否有任何其他方法可以获得 OAUTH 令牌?
有没有办法通过服务帐户而不是 google 用户帐户完成身份验证并获取 OAUTH 令牌?
对于自动化过程,服务帐户是推荐的方式。您可以为此使用 google-oauth library。您可以像这样生成访问令牌
# With default credential (your user account or the Google Cloud Component service account.
# Or with the service account key file defined in the GOOGLE_APPLICATION_CREDENTIALS env var -> for platform outside GCP)
credentials, project_id = google.auth.default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
# With service account key file (not recommended)
# credentials = service_account.Credentials.from_service_account_file('service-account.json',
# scopes=["https://www.googleapis.com/auth/cloud-platform"])
from google.auth.transport import requests
credentials.refresh(requests.Request())
print(credentials.token)
但是,如果你想调用Google云API,我建议你使用授权请求对象
这里是一个 BigQuery 调用的例子。您可以像我之前的示例一样使用服务帐户密钥文件生成您的凭据。
base_url = 'https://bigquery.googleapis.com'
credentials, project_id = google.auth.default(scopes=['https://www.googleapis.com/auth/cloud-platform'])
project_id = 'MyProjectId'
authed_session = AuthorizedSession(credentials)
response = authed_session.request('GET', f'{base_url}/bigquery/v2/projects/{project_id}/jobs')
print(response.json())
编辑
当您想使用 Google API 时,您的计算机和 GCP 组件上不需要服务帐户密钥文件(我建议您不要使用它)。应用程序默认凭据总是足够的。
- 当您在本地环境中时,您必须运行 命令
gcloud auth application-default login
。使用此命令,当您 运行 在本地您的应用程序时,您将注册您的个人帐户作为默认凭据。 (当然,您需要在您调用的组件上授权您的用户帐户电子邮件)
- 当您在 GCP 环境中时,每个组件都有一个默认服务帐户(或者您可以在配置组件时指定一个)。由于组件“身份”,您可以使用默认凭证。 (当然,您需要在您调用的组件上授权服务帐户电子邮件)
仅 当您 运行 一个应用程序在 GCP 之外自动运行时,您需要一个服务帐户密钥文件(例如,在您的 CI/CD 其他云构建,或部署在其他云提供商或本地的应用程序中)
为什么不推荐服务帐户密钥文件?至少我是推荐的,因为这个文件是.....一个文件!!那就是问题所在。你有办法在一个简单的文件中验证服务帐户:你必须安全地存储它(这是一个秘密和一种验证方法!!),你可以复制它,你可以通过电子邮件发送它,你甚至可以提交它public GIT 存储库...此外,Google 建议每 90 天轮换一次,因此轮换、跟踪和管理是一场噩梦
我目前正在使用以下代码获取 OAUTH 令牌
command = 'gcloud auth print-access-token'
result = str(subprocess.Popen(command, universal_newlines=True, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE).communicate())
结果变量具有 OAUTH 令牌。此技术使用我当前登录的 gcloud 配置。
但是,我正在寻找一种无需使用命令行即可获取 OAUTH 令牌的方法。 我正在使用此 OAUTH 令牌进行 CDAP 调用以获取 Google 数据流管道执行详细信息。
我查看了一些 google 博客。这是我认为应该尝试的方法,但它要求创建同意屏幕,并且需要一次 activity 来同意定义的范围,然后它应该可以工作。 Google Document
我是否应该按照上述文档中的步骤进行检查,或者是否有任何其他方法可以获得 OAUTH 令牌? 有没有办法通过服务帐户而不是 google 用户帐户完成身份验证并获取 OAUTH 令牌?
对于自动化过程,服务帐户是推荐的方式。您可以为此使用 google-oauth library。您可以像这样生成访问令牌
# With default credential (your user account or the Google Cloud Component service account.
# Or with the service account key file defined in the GOOGLE_APPLICATION_CREDENTIALS env var -> for platform outside GCP)
credentials, project_id = google.auth.default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
# With service account key file (not recommended)
# credentials = service_account.Credentials.from_service_account_file('service-account.json',
# scopes=["https://www.googleapis.com/auth/cloud-platform"])
from google.auth.transport import requests
credentials.refresh(requests.Request())
print(credentials.token)
但是,如果你想调用Google云API,我建议你使用授权请求对象
这里是一个 BigQuery 调用的例子。您可以像我之前的示例一样使用服务帐户密钥文件生成您的凭据。
base_url = 'https://bigquery.googleapis.com'
credentials, project_id = google.auth.default(scopes=['https://www.googleapis.com/auth/cloud-platform'])
project_id = 'MyProjectId'
authed_session = AuthorizedSession(credentials)
response = authed_session.request('GET', f'{base_url}/bigquery/v2/projects/{project_id}/jobs')
print(response.json())
编辑
当您想使用 Google API 时,您的计算机和 GCP 组件上不需要服务帐户密钥文件(我建议您不要使用它)。应用程序默认凭据总是足够的。
- 当您在本地环境中时,您必须运行 命令
gcloud auth application-default login
。使用此命令,当您 运行 在本地您的应用程序时,您将注册您的个人帐户作为默认凭据。 (当然,您需要在您调用的组件上授权您的用户帐户电子邮件) - 当您在 GCP 环境中时,每个组件都有一个默认服务帐户(或者您可以在配置组件时指定一个)。由于组件“身份”,您可以使用默认凭证。 (当然,您需要在您调用的组件上授权服务帐户电子邮件)
仅 当您 运行 一个应用程序在 GCP 之外自动运行时,您需要一个服务帐户密钥文件(例如,在您的 CI/CD 其他云构建,或部署在其他云提供商或本地的应用程序中)
为什么不推荐服务帐户密钥文件?至少我是推荐的,因为这个文件是.....一个文件!!那就是问题所在。你有办法在一个简单的文件中验证服务帐户:你必须安全地存储它(这是一个秘密和一种验证方法!!),你可以复制它,你可以通过电子邮件发送它,你甚至可以提交它public GIT 存储库...此外,Google 建议每 90 天轮换一次,因此轮换、跟踪和管理是一场噩梦