Как получить токен Google OAUTH без использования командной строки Gcloud - PullRequest
0 голосов
/ 14 июля 2020

В настоящее время я использую следующий код для получения токена OAUTH

command = 'gcloud auth print-access-token'
result = str(subprocess.Popen(command, universal_newlines=True, shell=True, stdout=subprocess.PIPE, 
stderr=subprocess.PIPE).communicate())

Переменная результата имеет токен OAUTH. Этот метод использует мою текущую зарегистрированную в gcloud конфигурацию.

Однако я ищу способ получить токен OAUTH без использования командной строки. Я использую этот токен OAUTH для выполнения вызовов CDAP для получения сведений о выполнении конвейера потока данных Google.

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

Должен ли я выполнить шаги, указанные в приведенном выше документе, и проверить ИЛИ есть ли другой способ получить токен OAUTH? Есть ли способ выполнить аутентификацию с помощью учетной записи службы вместо учетной записи пользователя Google и получить токен OAUTH?

1 Ответ

2 голосов
/ 14 июля 2020

Для автоматизированного процесса рекомендуется использовать сервисный аккаунт. Для этого вы можете использовать библиотеку google-oauth . Вы можете сгенерировать токен доступа следующим образом:

    # With default credential (your user account or the Google Cloud Component service account. 
    # Or with the service account key file defined in the GOOGLE_APPLICATION_CREDENTIALS env var -> for platform outside GCP)
    credentials, project_id = google.auth.default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
    # With service account key file (not recommended)
    # credentials = service_account.Credentials.from_service_account_file('service-account.json',
    #    scopes=["https://www.googleapis.com/auth/cloud-platform"])
    from google.auth.transport import requests
    credentials.refresh(requests.Request())
    print(credentials.token)

Однако, если вы хотите вызвать облачные API Google, я рекомендую вам использовать авторизованный объект запроса

Вот пример BigQuery вызов. Вы можете использовать файл ключей сервисной учетной записи для создания учетных данных, как в моем предыдущем примере.

    base_url = 'https://bigquery.googleapis.com'

    credentials, project_id = google.auth.default(scopes=['https://www.googleapis.com/auth/cloud-platform'])
    project_id = 'MyProjectId'
    authed_session = AuthorizedSession(credentials)
    response = authed_session.request('GET', f'{base_url}/bigquery/v2/projects/{project_id}/jobs')
    print(response.json())

EDIT

Если вы хотите использовать API Google, файл ключа учетной записи службы не нужен (и я рекомендую вам не использовать его) на вашем компьютере и в компоненте GCP. Учетных данных приложения по умолчанию всегда достаточно.

  • Когда вы находитесь в своей локальной среде, вы должны выполнить команду gcloud auth application-default login. С помощью этой команды вы зарегистрируете свою личную учетную запись в качестве учетных данных по умолчанию при локальном запуске приложения. (конечно, вам необходимо, чтобы адрес электронной почты вашей учетной записи был авторизован для компонента, который вы вызываете)
  • Когда вы находитесь в среде GCP, каждый компонент имеет учетную запись службы по умолчанию (или вы можете указать ее, настроив свой составная часть). Благодаря компоненту «идентичность» вы можете использовать учетные данные по умолчанию. (конечно, у вас должен быть авторизован адрес электронной почты сервисного аккаунта на вызываемом компоненте)

ТОЛЬКО когда вы запускаете приложение автоматически и вне GCP, вам нужна услуга файл ключа учетной записи (например, в вашем CI / CD, отличном от Cloud Build, или в приложении, развернутом на другом облачном провайдере или локально)

Почему не рекомендуется использовать файл ключа учетной записи службы? Это, по крайней мере, моя рекомендация, потому что этот файл ... файл !! Это проблема. У вас есть способ аутентифицировать учетную запись службы в простом файле: вы должны надежно хранить его (это секрет и метод аутентификации !!), вы можете скопировать его, вы можете отправить по электронной почте, вы даже можете зафиксировать его в репозиторий publi c GIT ... Кроме того, Google рекомендует менять их каждые 90 дней, так что чередовать, отслеживать и управлять

- кошмар.
...