Какую конечную точку токена использует JFrog Artifactory для своих реестров Docker? - PullRequest
3 голосов
/ 03 апреля 2019

Я пытаюсь написать код, который по сути может сделать docker inspect для изображений, опубликованных в частной артефакте JFrog, без необходимости извлекать сами изображения.Я использовал руководство под названием Проверка образов Docker без pull для разбивки вызовов API.Руководство использует общедоступный реестр Docker Hub в качестве своей базы, а не Artifactory, который немного отличается.

В основном необходимо выполнить 3 вызова API:

  1. Сначалаполучить токен
  2. Затем получить «дайджест» для данного изображения / тега
  3. Наконец получить конфигурацию, соответствующую этому дайджесту

У меня есть Artifactory, настроенный для разрешенияанонимный доступ для чтения.Таким образом, любой, кто знает URL, может сделать docker pull без предоставления учетных данных, и это работает.Я подтвердил это.

Поскольку он разрешает анонимный доступ, я сначала предположил, что, возможно, я мог бы пропустить вызов API № 1 (получение токена) и перейти непосредственно к вызову API № 2 (поиск дайджеста) без предоставления дайджеста.знакОднако, это не так.В этом случае Artifactory возвращает несанкционированную ошибку.

Затем я подумал, хорошо, хорошо, я просто попаду в конечную точку токена.Но вместо auth.docker.io я изменю его на поддомен моего сервера Artifactory, а POST на конечную точку /token.Это не сработало.Затем я обнаружил эту часть официального кода ContainerD , который на самом деле имеет условный регистр, специально разработанный для встроенной в JFrog Artifactory.

Похоже, что Artifactory возвращает 401 (Unauthorized), когда вы пытаетесьPOST к конечной точке /token, и, кроме того, клиент Docker знает об этом, поэтому возвращается к попытке запроса GET.Но вот где это становится немного неясным для меня.Я не программист на Голанге, поэтому мне трудно понять, что происходит в коде Docker CLI Go.

Я предполагал, что это просто изменение POST на GET, но в остальном используется тот же URL(т.е. /v2/token).Тем не менее, это не работает.Когда я пытаюсь достичь этой конечной точки, я все еще получаю НЕСАНКЦИОНИРОВАННЫЙ ответ.Если посмотреть далее на этот код ContainerD , похоже, что он может устанавливать базовую аутентификацию с использованием имени пользователя и секрета.Но я не уверен, какими будут эти значения, поскольку это делается с помощью анонимного доступа.Ясно, что он достигает некоторой конечной точки токена на моем сервере Artifactory, поскольку запуск docker pull успешен.Мне просто интересно, как на самом деле выглядит резервный вызов API?А какие параметры / заголовки / аутентификацию нужно в него передать?

1 Ответ

0 голосов
/ 18 апреля 2019

Artifactory позволяет вам создать ключ API вручную через их веб-интерфейс (щелкните в своем профиле пользователя), а затем вы можете использовать этот ключ вместо пароля для вызовов API подпоследовательности.Ключ может сохраняться до тех пор, пока вы его не обновите.

См. Здесь о том, как использовать ключ / токен

Для программного управления токенами API-токен Artifactory не имеет такой жеконечная точка как docker.io, см. их документацию здесь .

...