Как получить токен API для GitHub Container Registry

Вопрос или проблема

Я пытаюсь аутентифицироваться в GitHub Container Registry (ghcr.io) через curl, и у меня не очень хорошо получается. Я знаю, что мне нужен GitHub PAT с правами package:read, которые у меня есть, и затем я могу использовать это для генерации токена.

При получении публичного изображения я могу выполнить эту команду и получить токен без проблем, если переменные окружения $USER_NAME и $IMAGE установлены на правильные значения.

curl -v "https://ghcr.io/token?service=ghcr.io&scope=repository:$USER_NAME/$IMAGE:pull"

Но когда я пытаюсь сделать то же самое для приватного изображения.

curl -v -H "Authorization: Bearer $GITHUB_TOKEN" "https://ghcr.io/token?service=ghcr.io&scope=repository:$USER_NAME/$IMAGE:pull"

Я получаю

< HTTP/2 401
< content-type: application/json
< docker-distribution-api-version: registry/2.0
< www-authenticate: Bearer realm="https://ghcr.io/token",service="ghcr.io",scope="repository:user/image:pull"
< date: Fri, 08 Nov 2024 00:36:26 GMT
< content-length: 73
< x-github-request-id: C559:34E8D2:158A23A:18442CA:672D5D0A
<
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required"}]}
 * Подключение #0 к хосту ghcr.io осталось нетронутым

Я даже пытался дать PAT все разрешения в своей учетной записи. Я вижу в выводе curl, что PAT выводится правильно.

Оказывается, что ghcr.io использует базовую аутентификацию в формате <username>:<PAT>

Поэтому это будет выглядеть примерно так.

curl -H "Authorization: Basic $BASE64_CREDENTIALS" "https://ghcr.io/token?service=ghcr.io&scope=repository:<user>/<image>:pull"

{"token":"xyz"}

Ответ или решение

Как получить токен API для GitHub Container Registry

При работе с GitHub Container Registry (ghcr.io) для аутентификации и получения временного токена вам потребуется следовать определённой последовательности действий. В этой статье подробно обсуждается процесс получения токена, необходимого для доступа к закрытым образам.

Шаг 1: Создание персонального токена доступа (PAT)

Для начала вам нужно создать персональный токен доступа (PAT) с соответствующими правами. Ниже приведены шаги по созданию PAT с правами package:read и другими необходимыми правами, если хотите:

  1. Перейдите в настройки вашего GitHub-аккаунта.
  2. В разделе "Developer settings" (Настройки разработчика) выберите "Personal access tokens" (Персональные токены доступа).
  3. Нажмите на кнопку "Generate new token" (Создать новый токен).
  4. Укажите название токена и установите срок действия.
  5. Убедитесь, что вы выбрали разрешения, в частности:
    • package:read — для чтения пакетов.

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

Шаг 2: Кодирование учетных данных

Чтобы использовать ваш персональный токен доступа для аутентификации, вам нужно закодировать учетные данные в формате Base64. Формат должен выглядеть следующим образом: <username>:<PAT>.

Например, используя команду в терминале:

echo -n "$GITHUB_USERNAME:$GITHUB_TOKEN" | base64

Где:

  • $GITHUB_USERNAME — ваше имя пользователя GitHub.
  • $GITHUB_TOKEN — ваш персональный токен доступа.

Результатом выполнения этой команды будет строка, которую вы будете использовать в следующем шаге.

Шаг 3: Запрос токена для доступа к образу

Теперь вы можете выполнить запрос к GitHub Container Registry для получения токена. Используя команду curl, вам нужно передать заголовок Authorization с вашим закодированным токеном. Пример команды:

curl -H "Authorization: Basic $BASE64_CREDENTIALS" "https://ghcr.io/token?service=ghcr.io&scope=repository:$USER_NAME/$IMAGE:pull"

Где:

  • $BASE64_CREDENTIALS — результат кодирования учетных данных в Base64.
  • $USER_NAME — ваше имя пользователя GitHub.
  • $IMAGE — имя вашего образа.

Шаг 4: Обработка ответа

Если все выполнено корректно, вы получите ответ, содержащий токен, который вы сможете использовать для аутентификации и получения доступ к закрытым образам в GitHub Container Registry. Пример успешного ответа выглядит так:

{"token":"xyz"}

Заключение

В результате выполнения всех вышеописанных шагов вы сможете успешно аутентифицироваться в GitHub Container Registry и получать токены для доступа к приватным изображениям. Этот процесс может показаться сложным, однако, следуя этому алгоритму, вы сможете избежать большинства распространённых ошибок и неудач, которые возникают при работе с API GitHub. Не забывайте бережно относиться к вашему токену доступа и никогда не делитесь им с третьими лицами.

Оцените материал
Добавить комментарий

Капча загружается...