Keycloak пользовательское развертывание Docker ProtocolMapper - PullRequest
1 голос
/ 18 октября 2019

Я экспериментирую с keycloak и интегрированной аутентификацией реестра Docker v2. Все работает нормально с этим. Однако в настоящее время нет реального уровня авторизации, и, посмотрев на исходный код на github, я вижу, что существует класс AllowAllDockerProtocolMapper , который автоматически предоставляет все разрешения для реестра докера зарегистрированному пользователю.

Я хотел бы реализовать механизм авторизации на основе пространства имен, т. Е. Чтобы вошедший в систему пользователь имел полномочия только на push / pull внутри своего собственного пространства имен (например, https://myregistry.local/username).

Прямо сейчасОднако, я изо всех сил пытаюсь получить простой рабочий пример. Я прочитал руководство по keycloak для spi на https://www.keycloak.org/docs/latest/server_development/index.html#_providers и посмотрел некоторые примеры на github, но сейчас развернутый модуль, похоже, не выбранвверх по keycloak.

Что я сделал:

  • Создан класс UserNamespaceMapper , который расширяет DockerAuthV2ProtocolMapper и реализует DockerAuthV2AttributeMapper (Я в основном скопировал пример из AllowAllDockerProtocolMapper )
  • Создал dirs META-INF / services на classpath и поместил туда файл с именем org.keycloak.protocol.ProtocolMapper , который содержит полное имя для моего UserNamespaceMapper class
  • Createdjar docker-user-namespace-mapper.jar из моего исходного кода
  • Создал модуль, выполнив следующую команду:

    KEYCLOAK_HOME/bin/jboss-cli.sh --command="module add --name=a.b.c.d.docker-user-namespace-mapper --resources=/build/libs/docker-user-namespace-mapper.jar --dependencies=org.keycloak:keycloak-services,org.keycloak.keycloak-server-spi-private,org.keycloak:keycloak-server-spi".

  • Модифицированный standalone.xml:

   <subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
       <web-context>auth</web-context>
       <providers>
           <!-- THIS IS WHAT I ADDED -->
           <provider>module:a.b.c.d.docker-user-namespace-mapper</provider>
       </providers>
       ...
  • Перезагрузка клавиатуры

Когда я иду вАдминистратор кли и попробуйте добавить новый сопоставитель для клиента docker-v2, новый сопоставитель не отображается, и все выглядит так же, как до развертывания. Во время развертывания и перезапуска сервера ошибок не выдается. Кто-нибудь может мне помочь правильно установить этот докер маппер?

Любая помощь очень ценится!

Спасибо, Иван

1 Ответ

1 голос
/ 23 октября 2019

Я наконец выяснил, почему это не работает.

Модуль не был обнаружен Keycloak, потому что я редактировал неправильный файл конфигурации. Вместо добавления провайдера в standalone.xml мне пришлось добавить его в standalone-ha.xml. Это потому, что я на самом деле использую официальный образ док-станции Keycloak jboss / keycloak и, посмотрев на их скрипт запуска docker-entrypoint.sh, становится ясно, что используется standalone-ha.xml. Вы можете найти более подробную информацию здесь: Поставщики SPI Keycloak и слои, не загружающиеся при использовании Docker .

На случай, если кто-то заинтересован в том, чтобы реализовать / развернуть пользовательский сопоставитель Keycloak - на основе пространства имен пользователя- для реестра DockerV2: посмотрите мой код здесь: https://github.com/ieggel/DockerRegistryKeycloakUserNamespaceMapper

Cheers!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...