使用gcp admin sdk发现建立在云端的服务账号功能。

问题描述 投票:-1回答:1

目前,我能够使用部署在服务账户中的云功能中的以下代码访问用户,该账户具有域范围的授权。但我使用service_account.Credentials.from_service_account_file从凭证文件中获取,但我不想硬编码凭证,这不是正确的方法。请告诉我是否有一种方法可以不通过凭证来使用。

如果我不在构建中使用凭证,那么我就会得到403。

import googleapiclient.discovery
from google.oauth2 import service_account

SCOPES = ['https://www.googleapis.com/auth/admin.directory.user']
SERVICE_ACCOUNT_FILE = 'service-account-bc07yg1386.json'


credentials_org = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES, subject="[email protected]")

service = googleapiclient.discovery.build('admin', 'directory_v1', credentials=credentials_org)

results = service.users().get(userKey=user_email).execute()
google-admin-sdk google-directory-api
1个回答
0
投票

当使用服务账户时,你 需要 以使用凭证来验证请求。

此外,您可以实例化一个 管理SDK目录服务对象 通过使用以下代码,从 执行G Suite全域授权文档。:

from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

SERVICE_ACCOUNT_EMAIL = '<some-id>@developer.gserviceaccount.com'
SERVICE_ACCOUNT_PKCS12_FILE_PATH = '/path/to/<public_key_fingerprint>-privatekey.p12'

def create_directory_service(user_email):
    credentials = ServiceAccountCredentials.from_p12_keyfile(
        SERVICE_ACCOUNT_EMAIL,
        SERVICE_ACCOUNT_PKCS12_FILE_PATH,
        'notasecret',
        scopes=['https://www.googleapis.com/auth/admin.directory.user'])
    credentials = credentials.create_delegated(user_email)
    return build('admin', 'directory_v1', credentials=credentials)

说明:

Python版本使用了一个 P12格式的密钥文件 当进入相应的 谷歌云项目,选择 管理SDK 然后 全权证书:

create P12 key file

参考资料

© www.soinside.com 2019 - 2024. All rights reserved.