bro*_*key 1 python gcloud gcloud-python google-cloud-python
我正在更新脚本以调用受 OAuth2 保护的 Google Cloud 端点。以前的版本假设一个用户以前通过身份验证gcloud auth login,因此能够使用默认值:
credentials = GoogleCredentials.get_application_default()
http = credentials.authorize(http)
Run Code Online (Sandbox Code Playgroud)
但是现在我必须以用户 A 和用户 B 的身份执行一些调用。我可以在 shell 中执行这些步骤来生成访问令牌,但我更愿意直接在程序中执行此操作:
gcloud auth login user_A@email.com
gcloud auth print-access-token user_A@email.com
Run Code Online (Sandbox Code Playgroud)
有没有办法Credentials为两封不同的电子邮件生成两个值而无需运行任何 shell 命令?
小智 5
我的案例有点不同,但希望您能找到适合您的用例的等效案例。我正在使用服务帐户进行身份验证。
成功认证需要 3 件事
服务帐户文件。这是创建服务帐户后获得的 JSON 文件
范围。这指定您需要访问哪个 Google API。就我而言,我需要访问 Google Groups API。因此我需要的范围是:“ https://www.googleapis.com/auth/admin.directory.group ”
您可以在这里找到所有范围的列表:https://developers.google.com/identity/protocols/googlescopes
以下是等效的 Python 代码:
from google.oauth2 import service_account
from googleapiclient.discovery import build
SCOPES = ["https://www.googleapis.com/auth/admin.directory.group"]
SERVICE_ACCOUNT_FILE = "my-service-account.json"
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE,
scopes=SCOPES,
subject="admin@example.com")
admin_service = build("admin", "directory_v1", credentials=credentials)
group = admin_service.groups().list(domain="example.com").execute()
print("groups list: ", group)
Run Code Online (Sandbox Code Playgroud)
现在根据您的问题,如果您想冒充其他用户。然后你可以使用
new_user_email = "user2@example.com"
user2_credentials = credentials.with_subject(new_user_email)
new_service = build("admin", "directory_v1", credentials=user2_credentials)
# use this new_service to call required APIs
Run Code Online (Sandbox Code Playgroud)
以下是使用 python 库的服务帐户进行身份验证的文档的链接:https://google-auth.readthedocs.io/en/latest/reference/google.oauth2.service_account.html
以下是服务帐户的 Oauth 流程通常如何发生的链接:https://github.com/googleapis/google-api-python-client/blob/master/docs/oauth-server.md
我希望这对你有一些帮助。
PS - 这是我在 Stack Overflow 上的第一个答案,所以请告诉我如何改进我的答案。
| 归档时间: |
|
| 查看次数: |
1217 次 |
| 最近记录: |