Как получить токен на предъявителя GCP программным способом

gcloud auth print-access-token дает мне токен на предъявителя, который я могу использовать позже. Токен выглядит так: Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg

Как я могу получить такой токен без использования gcloud, желательно с помощью кода Python.

#!/usr/bin/python

from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
credentials.get_access_token()
token1 = credentials.access_token
# magic piece of code to convert token1 into the 
# example Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg
# type.

person strzelecki.maciek    schedule 28.09.2017    source источник


Ответы (1)


Токен, который генерирует ваш фрагмент кода, - это токен, который вам нужен для заголовка. Вы просто должны иметь возможность установить заголовок «Авторизация» на "Bearer "+token1.

Обратите внимание, что срок действия токенов доступа истекает, поэтому, если у вас есть долгоживущее приложение, вы не можете просто сохранить токен доступа и продолжать использовать его вечно. В конце концов вы получите 401, и вам нужно будет получить новый токен доступа.

Лучше всего, чтобы HTTP-вызов автоматически обрабатывал 401 для получения нового access_token. Обычно это также обрабатывает для вас кеширование токенов доступа, поэтому вам не нужно об этом беспокоиться. Фактически вы можете:

http = credentials.authorize(httplib2.Http())

А затем весь день используйте http для своих запросов, совершенно не беспокоясь о токене доступа.

person David    schedule 29.09.2017
comment
{"errors":[{"code":"DENIED","message":"Failed to read tags for host... Я не могу заставить эту авторизацию работать. У учетной записи есть правильные разрешения, бок о бок я могу перечислить теги докеров через _token auth curl. - person strzelecki.maciek; 29.09.2017
comment
Это сообщение об ошибке исходит от GCR, который требует особых требований к авторизации. Также возможно, что вы прошли проверку подлинности правильно, но учетная запись службы не авторизована для определенных данных, которые вы запрашиваете. Можете ли вы опубликовать полный код, отправив запрос? Можете ли вы увидеть, какие разрешения GCS есть у вашей учетной записи службы в корзине aritfact.PROJECT.appspot.com? - person David; 29.09.2017