在来自 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 来查找应用程序凭据。但这似乎是针对我不存在的应用程序凭据。
我找不到使用用户帐户身份验证进行连接的任何其他方式。但我觉得它非常奇怪,因为:
- R 语言的 google API 仅适用于用户身份验证。 R 中的并行代码(它有不同的 API)可以正常工作!
- 我 运行 来自数据拼写的代码 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。
我正在尝试从本地计算机上的 Jupyter notebook 运行 中的 python 代码访问 BigQuery。所以我在笔记本电脑上安装了 google 云 API 软件包。
我需要通过OAuth2认证。但不幸的是,我只有我们的 bigquery 的用户帐户。我没有服务帐户,也没有应用程序凭据,也没有创建此类凭据的权限。我只能使用用户帐户。
当 运行 启用 bigquery.Client()
函数时,它似乎通过查看环境变量 GOOGLE_APPLICATION_CREDENTIALS 来查找应用程序凭据。但这似乎是针对我不存在的应用程序凭据。
我找不到使用用户帐户身份验证进行连接的任何其他方式。但我觉得它非常奇怪,因为:
- R 语言的 google API 仅适用于用户身份验证。 R 中的并行代码(它有不同的 API)可以正常工作!
- 我 运行 来自数据拼写的代码 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。