在来自 jupyter 笔记本的 python google 云 API 中使用 OAuth2 用户帐户身份验证

using OAuth2 user account authentication in the python google cloud API from jupyter notebook

我正在尝试从本地计算机上的 Jupyter notebook 运行 中的 python 代码访问 BigQuery。所以我在笔记本电脑上安装了 google 云 API 软件包。

我需要通过OAuth2认证。但不幸的是,我只有我们的 bigquery 的用户帐户。我没有服务帐户,也没有应用程序凭据,也没有创建此类凭据的权限。我只能使用用户帐户。

当 运行 启用 bigquery.Client() 函数时,它似乎通过查看环境变量 GOOGLE_APPLICATION_CREDENTIALS 来查找应用程序凭据。但这似乎是针对我不存在的应用程序凭据。

我找不到使用用户帐户身份验证进行连接的任何其他方式。但我觉得它非常奇怪,因为:

  1. R 语言的 google API 仅适用于用户身份验证。 R 中的并行代码(它有不同的 API)可以正常工作!
  2. 我 运行 来自数据拼写的代码 IDE。我在 IDE 中创建了一个到 bigquery 的数据库资源连接(使用我的用户身份验证)。在那里我可以为数据库打开一个控制台,我可以在控制台中毫无问题地进行 运行 SQL 查询。我已将 bigquery 会话附加到我的 python 笔记本,我可以在服务窗格中看到我的笔记本附加到 big 查询会话。但是我仍然遗漏了一些东西,以便在 python 代码中访问一些有效的 运行ning 连接。 (我不知道如何获得代表有效连接客户端的 python 对象)。

我一直在阅读 google 的手册,并花了几个小时寻找代码示例...唉,我在我的笔记本上找不到任何关于使用用户帐户连接客户端的描述。

拜托,有人可以帮忙吗?

您可以使用 pydata-google-auth 库来 authenticate with a user account。此函数从磁盘上的缓存加载凭据,或者在找不到凭据时启动 OAuth2.0 流程。这不是进行身份验证的推荐方法。

import pandas_gbq
import pydata_google_auth

SCOPES = [
    'https://www.googleapis.com/auth/cloud-platform',
    'https://www.googleapis.com/auth/drive',
]

credentials = pydata_google_auth.get_user_credentials(
    SCOPES,
    # Set auth_local_webserver to True to have a slightly more convienient
    # authorization flow. Note, this doesn't work if you're running from a
    # notebook on a remote sever, such as over SSH or with Google Colab.
    auth_local_webserver=True,
)

df = pandas_gbq.read_gbq(
    "SELECT my_col FROM `my_dataset.my_table`",
    project_id='YOUR-PROJECT-ID',
    credentials=credentials,
)

推荐的身份验证方法是联系您的 GCP 管理员并告诉他们在下一个 instructions 之后为您的帐户创建一个密钥。

然后您可以使用此代码通过您拥有的密钥设置身份验证:

from google.oauth2 import service_account

credentials = service_account.Credentials.from_service_account_file(
    '/path/to/key.json')

您可以查看更多文档 here