Доступ к Concourse REST API из ресурса

Я пытаюсь написать собственный ресурс Concourse (на Python), который обращается к REST API экземпляра Concourse для получения информации. Я застрял в получении токена на предъявителя при входе в систему. Проблема в том, что когда я следую сути этого сценария оболочки

#!/bin/bash

## Variables required  #need to update these to take inputs for getting token per team and target.
CONCOURSE_URL="http://localhost:8080"
CONCOURSE_USER="test"
CONCOURSE_PASSWORD="test"
CONCOURSE_TEAM="test"
CONCOURSE_TARGET="my-concourse"

function get_token() {
  ## Create a file named token that will be used to read and write tokens
  touch token

  ## extract the LDAP authentication url and write to token file
  LOCAL_AUTH_URL=$CONCOURSE_URL$(curl -b token -c token -L "$CONCOURSE_URL/sky/login" -s | grep "/sky/issuer/auth/local" | awk -F'"' '{print $4}')
  echo "url is $LOCAL_AUTH_URL"
  # login using username and password while writing to the token file
  curl -s -o /dev/null -b token -c token  -L --data-urlencode "login=$CONCOURSE_USER" --data-urlencode "password=$CONCOURSE_PASSWORD" "$LOCAL_AUTH_URL"

  ATC_BEARER_TOKEN=`grep 'Bearer' token | cut -d\   -f2 | sed 's/"$//'`
  echo $ATC_BEARER_TOKEN
}

задействовано много перенаправлений, и по крайней мере некоторые из них ссылаются на экземпляр concourse как на http://localhost:8080, который не работает из док-контейнера ресурса.

Поэтому я хотел параметризовать внешний базовый URL-адрес и явно указать его в конфигурации ресурса. Ручная обработка перенаправлений и перезапись локального IP-адреса в URL-адрес завершается неудачно на последнем этапе «утверждения» с кодом 400, вероятно, потому, что это похоже на какую-то междоменную атаку.

Переменная окружения ATC_EXTERNAL_URL всегда является localhost: 8080, и я подозреваю, что она также используется при формировании URL-адресов перенаправления. Это можно где-нибудь установить?

Я плохо разбираюсь в голанге, но мне кажется, что https://github.com/concourse/concourse-pipeline-resource вызывает двоичный файл fly для выполнения какого-либо входа в систему изнутри ресурса. Не могу сказать, что могу понять, что он делает и как.

Любая помощь приветствуется ...


person CptPicard    schedule 20.05.2020    source источник


Ответы (1)


Env var $ATC_EXTERNAL_URL, скорее всего, соответствует внешнему URL-адресу, указанному при запуске Concourse, поэтому да, его можно (и если вы используете внешнюю аутентификацию, такую ​​как Github или OAuth, необходимо). Вы правы, предполагая, что он используется для создания URL-адресов обратного вызова.

Кроме того, я не хочу быть этим парнем (TM), но API REST Concourse не является общедоступным и может быть изменен в любое время. Что вы пытаетесь сделать, чего не можете получить с fly CLI? Ваш ресурс может вызвать ATC_EXTERNAL_URL, чтобы получить интерфейс командной строки fly, когда это необходимо, а затем выполнить команды таким образом.

person Josh Ghiloni    schedule 22.05.2020