Как получить делегированные объекты учетных данных для вызова Google API? - PullRequest
2 голосов
/ 26 марта 2019

Я пытаюсь получить оповещения gsuite через API.Я создал учетную запись службы в соответствии с их документами , и я назначил эту учетную запись службы моей облачной функции Google.

Я не хочу использовать переменные среды или загружать учетные данные вместе с исходным кодомно я хочу использовать учетную запись службы по умолчанию, используемую функцией.

from googleapiclient.discovery import build

def get_credentials():

    # if one knows credentials file location(when one uploads the json credentials file or specify them in environment variable) one can easily get the credentials by specify the path.
    # In case of google cloud functions atleast I couldn't find it the path as the GOOGLE_APPLICATION_CREDENTIALS is empty in python runtime

    # the below code work find if one uncomments the below line
    #credentials = ServiceAccountCredentials.from_json_keyfile_name(key_file_location)

    credentials = < how to get default credentials object for default service account?>

    delegated_credentials = credentials.create_delegated('admin@alertcenter1.bigr.name').create_scoped(SCOPES)
    return delegated_credentials

def get_alerts(api_name, api_version, key_file_location=None):

    delegated_credentials = get_credentials()
    alertcli = build(api_name, api_version, credentials=delegated_credentials)
    resp = alertcli.alerts().list(pageToken=None).execute()
    print(resp)


Есть ли способ создать объект учетных данных по умолчанию.Я пытался использовать учетные данные для импорта из google.auth, но они не содержат функцию create_delegated, и я также пытался использовать ServiceAccountCredentials (), но для этого требуется подписавшая сторона.

Ответы [ 2 ]

1 голос
/ 18 июля 2019

Вы можете использовать функцию google.auth.default, чтобы получить учетные данные по умолчанию и использовать их для создания подписывающего лица IAM, которое можно использовать для создания новых учетных данных учетной записи службы, для которых делегированный адрес электронной почты имеет значение subject.У меня есть более подробный ответ на аналогичный вопрос.

Существует также репозиторий Google Cloud Platform Github с некоторой документацией об этом методе.

0 голосов
/ 27 марта 2019

Вот пример использования API Gmail с делегированными учетными данными. Учетные данные учетной записи службы должны быть включены «Включить делегирование домена G Suite».

from google.oauth2 import service_account
from googleapiclient.discovery import build

credentials = service_account.Credentials.from_service_account_file(
                        credentials_file,
                        scopes=['https://www.googleapis.com/auth/gmail.send'])

impersonate = 'username@example.com'

credentials = credentials.with_subject(impersonate)

service = build('gmail', 'v1', credentials=credentials)
...