Рейтинг:2

Как создать токен носителя для cURL, чтобы получить доступ к IAP (GCP)?

флаг us
sts

Мне нужно cURL веб-приложения, размещенного за IAP на GCP.

Обычно пользователи входят через IAP и используют веб-приложение, но мне нужно запустить некоторые команды cURL (интерактивные и неинтерактивные), которые обращаются к URL-адресам веб-приложения (например: https://myapp.com/get_pics/1)

Я не могу понять, как получить токен носителя от GCP, который я могу использовать в заголовке авторизации для cURL.

Я могу настроить учетную запись службы с ролью «Пользователь защищенного веб-приложения IAP», и у меня есть ключ JSON для этой учетной записи службы, но я не уверен, куда идти после этого, чтобы получить правильный токен носителя, который примет IAP.

Nadia Espinosa avatar
флаг in
Я думаю, что эта информация о [генерировании аутентификации](https://cloud.google.com/iap/docs/programmatic-oauth-clients#service_accounts_and_gcloud) может быть полезной.
John Hanley avatar
флаг cn
@NadiaEspinosa - Ваша ссылка предназначена для создания токена доступа. В этом вопросе требуется Identity Token.
John Hanley avatar
флаг cn
В вашем случае вам нужен токен идентификации OIDC. Является ли удостоверение учетной записью пользователя или службы? При разработке используйте CLI для создания этого токена: **gcloud auth print-identity-token** https://cloud.google.com/sdk/gcloud/reference/auth/print-identity-token Также укажите службы, которые вы используют. Существует параметр для **aud** (--audiences), который является URL-адресом службы. Совет: используйте Python вместо Curl. Вам будет намного проще создавать токены OAuth/OIDC.
sts avatar
флаг us
sts
Удостоверение является сервисной учетной записью.Токен предназначен для клиента iOS, использующего REST API за IAP. Токены с коротким сроком службы - это облом, поскольку они просто тестируются на API, защищенном IAP. Python не очень помогает. Это вариант использования, который GCP не рассматривал. Разработчик является третьей стороной, поэтому мы не даем им gcloud, поэтому идея служебной учетной записи.
Ismael Clemente Aguirre avatar
флаг ye
@sts Поскольку это дело открыто уже 3 месяца, я хотел бы знать, нашли ли вы способ решить свою проблему.
sts avatar
флаг us
sts
Неа. Мы ударили.
Рейтинг:1
флаг us

Для IAP вам необходимо предоставить токен идентификации OIDC. Ты можешь использовать gcloud создать его для вас или использовать любой другой способ, как описано в Программная аутентификация.

Я предполагаю, что у вас есть gcloud, поэтому я покажу вам, как его использовать:

  1. Войти под учетной записью сервиса
gcloud auth активировать-сервис-аккаунт --key-file сервис-аккаунт-key.json
  1. Отправьте запрос
curl -H "Авторизация: носитель $(gcloud auth print-identity-token --audiences="xxx.apps.googleusercontent.com")" https://myapp.com/get_pics/1

Убедитесь, что вы предоставили служебной учетной записи iap.httpsResourceAccessor-разрешение, или вам все равно будет отказано.

  • Бонус: не используйте файлы ключей сервисной учетной записи. Олицетворите учетную запись службы из вашего текущего профиля пользователя.
curl -H "Авторизация: носитель $(gcloud auth print-identity-token --include-email --audiences="xxx.apps.googleusercontent.com" --impersonate-service-account=service_account@project.iam.gserviceaccount. ком)" https://myapp.com/get_pics/1
Рейтинг:1
флаг ye

Я не могу понять, как получить токен носителя от GCP, который я могу использовать в заголовке авторизации для cURL.

Согласно Общедоступная документация Google

Если ваше приложение занимает заголовок запроса авторизации, вы можете вместо этого включите токен ID в заголовок Proxy-Authorization: Bearer. Если в заголовке Proxy-Authorization обнаружен действительный токен ID, IAP авторизует запрос с ним. После авторизации запроса IAP передает заголовок авторизации вашему приложению без обработки содержание.

Если в заголовке Proxy-Authorization не найден действительный токен ID, IAP продолжает обрабатывать заголовок авторизации и удаляет Заголовок Proxy-Authorization перед передачей запроса на ваш применение.

Токен на предъявителя OIDC

Этот документ также включает примеры кода для:

И по этой ссылке вы можете найти больше информации о Проверить токен носителя в GCP

Аутентификация токена носителя

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

Первый входит в состав Общедоступная документация разработчиков Google, и описывает процесс получить токен Bearer с вашей учетной записью службы.

  1. Установите инструмент командной строки gcloud.

  2. Авторизуйтесь в своей учетной записи службы. В следующей команде заменять ${KEY_FILE} с путем к ключу вашей сервисной учетной записи файл:

    gcloud auth активировать сервис-аккаунт
    --key-файл ${KEY_FILE}
    
  3. Используйте свою учетную запись службы для получения токена авторизации:

    gcloud auth токен доступа к печати 
    

    Команда возвращает значение токена доступа.

При использовании API передайте значение токена в качестве токена-носителя в Заголовок авторизации. См. следующий пример:

    curl -X GET -H "X-Goog-User-Project: ${CLIENT_PROJECT}" \  
    -H "Тип контента: приложение/json" \  
    -H "Авторизация: носитель ${TOKEN}" \ 
"https://sasportal.googleapis.com/v1alpha1/customers" 

Установлен ${КЛИЕНТ_ПРОЕКТ} к ID проекта Google Cloud от которые вы делаете запросы, а затем установить ${ТОКЕН} к токен авторизации.

И в эта ссылка вы найдете информацию и примеры о Запрос Curl с заголовком авторизации токена носителя

John Hanley avatar
флаг cn
Существует два типа токенов: токен доступа OAuth и токен идентификации OIDC. Вопрос о IAP (Identity Aware Proxy), ваш ответ — о другом сервисе. Для IAP требуется токен идентификации OIDC.
Ismael Clemente Aguirre avatar
флаг ye
Спасибо за ваш комментарий, я уже отредактировал свой ответ.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.