我们公司正在处理来自 Google Cloud Platform 的 Google Sheets(在 Google Drive 中)的数据,我们在身份验证方面遇到了一些问题。
我们需要在两个不同的地方运行代码来调用 Google Drive 的 API:在 Google Compute Engine 的生产环境中,以及在开发环境中,即在我们开发人员的笔记本电脑上本地。
我们公司对凭据非常严格,不允许下载服务帐户凭据 JSON 密钥(这是更好的做法并提供更高的安全性)。似乎 GCP 的所有文档都说只需下载服务帐户的 JSON 密钥并使用它。或者 Google APIs/Developers docs 说要创建一个 OAuth2 客户端 ID 并像这里一样下载它的关键。
他们经常使用这样的代码:
from google.oauth2 import service_account
SCOPES = ['https://www.googleapis.com/auth/sqlservice.admin']
SERVICE_ACCOUNT_FILE = '/path/to/service.json'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
Run Code Online (Sandbox Code Playgroud)
但是我们不能(或者只是不想)下载我们的服务帐户 JSON 密钥,所以如果我们只是按照文档进行操作,我们就会陷入困境。
对于 Google Compute Engine 环境,我们已经能够使用 GCP 应用程序默认凭据 (ADC) 进行身份验证——即没有明确指定要在代码中使用的凭据并让客户端库“正常工作”——只要确保VM 是用正确的范围创建的https://www.googleapis.com/auth/drive,默认的计算服务帐户电子邮件被授予需要访问的工作表的权限 - 这在文档here中进行了解释。你可以这样做;
from googleapiclient.discovery import build
service = build('sheets', 'v4')
SPREADSHEET_ID="<sheet_id>" …Run Code Online (Sandbox Code Playgroud) python authentication google-api google-drive-api google-cloud-platform