Keycloak добавить дополнительные претензии из базы данных / внешнего источника с помощью сопоставления пользовательских протоколов - PullRequest
0 голосов
/ 31 октября 2018

Я видел эти два поста, которые дают решение этого вопроса, но они не предоставляют достаточно подробную информацию о том, как это сделать для не Java-разработчика, такого как я:

Keycloak добавляет дополнительные претензии из базы данных / внешнего источника

Как зарегистрировать пользовательский ProtocolMapper в Keycloak?

Вот резюме их решений, которые могли бы помочь другим, если бы были заполнены более подробной информацией.

Ожидаемый процесс от 1-й ссылки

  1. Пользователь входит в систему
  2. Мой пользовательский протокол протокола вызывается, где я перезаписываю метод transformAccessToken
  3. Здесь я вхожу в систему как клиент, где средство сопоставления протоколов входит в keycloak. Здесь не забудьте использовать другой идентификатор клиента вместо того, для которого вы строите средство отображения протокола, вы введете в противном случае бесконечная рекурсия.
  4. Я получаю токен доступа в преобразователь протокола и вызываю остальную конечную точку моего приложения, чтобы получить дополнительные утверждения, что Обеспеченный.
  5. Получить информацию, возвращаемую конечной точкой, и добавить ее в качестве дополнительных требований

Шаги для достижения этого от 2-й ссылки

Реализация интерфейса ProtocolMapper и добавление файла "META-INF / services / org.keycloak.protocol.ProtocolMapper" , содержащее ссылку на класс.

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

Чтобы добавить некоторые данные в токен, добавьте следующие интерфейсы

org.keycloak.protocol.oidc.mappers.OIDCAccessTokenMapper

и реализовать методы согласно интерфейсу

Затем добавьте файл " META-INF / jboss-deploy-structure.xml " с помощью следующее содержание

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.keycloak.keycloak-services"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

И после всего этого вызывается пользовательский метод transformAccessToken () на каждый запрос к URL http://:/auth/realms/testrealm/protocol/openid-connect/token

После прочтения у меня есть несколько вопросов:

  1. Как вы «внедряете ProtocolMapper»
  2. Куда вы добавляете файлы, упомянутые ранее? (не вижу никакой директории META-INF / в моей папке установки Keycloak)
  3. Как и где вы «добавляете следующие интерфейсы»
  4. Как выглядит пользовательский transformAccessToken ()

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

Редактировать:

Я начинаю вознаграждение с надеждой, что кто-нибудь сможет дать мне подробные инструкции о том, как добавить дополнительные заявки из базы данных в Keycloak 3.4.3 (достаточно подробно для разработчика, не являющегося Java)

Редактировать 2 Метод, описанный здесь, может добиться цели, но не содержит подробностей. Keycloak создает пользовательский маппер провайдера идентификации

1 Ответ

0 голосов
/ 08 ноября 2018

Надеюсь, это пошаговое руководство поможет вам

Я использую Keycloak 4.5.0 - потому что у меня установлена ​​эта более новая версия - но я не должен иметь большого значения. И я реализовал OIDCProtocolMapper в примере.

Просто для краткого изложения - для быстрого обзора для других - каждый шаг описан более подробно позже

  1. Вы реализуете класс CustomProtocolMapper на основе AbstractOIDCProtocolMapper

  2. META-INF / services Файл с имя org.keycloak.protocol.ProtocolMapper должно быть доступно и содержит имя вашего картографа

  3. jboss-deployment-structure.xml должны быть доступны для использования брелок встроенный в классах

  4. Файл Jar развернут в /opt/jboss/keycloak/standalone/deployments/

Хорошо, теперь более подробно: -)

Создайте свой собственный Mapper

Я загрузил вам мой maven pom.xml ( pom ) - просто импортируйте его в вашу IDE, и все зависимости должны быть загружены автоматически. Зависимости просто provided и будут позже использоваться из keycloak непосредственно во время выполнения

Соответствующим является свойство keycloak.version - все зависимости keycloak в настоящее время загружаются в версии 4.5.0.Final

Теперь я создал собственный класс сопоставления протоколов под названием CustomOIDCProtocolMapper. Найти "полный" код здесь

Должен расширяться AbstractOIDCProtocolMapper и должен реализовывать все абстрактные методы. Может быть, вы хотите иметь SAML Protocol Mapper, тогда это другой базовый класс (AbstractSAMLProtocolMapper)

один из подходящих методов - transformAccessToken - здесь я установил дополнительный запрос на AccessToken. Здесь нужна ваша логика, но да - зависит от вашей базы данных и т. Д .; -)

Файл служб

Файл служб важен , чтобы клавиатура нашла пользовательскую реализацию

Поместите файл с fileName org.keycloak.protocol.ProtocolMapper внутри \src\main\resources\META-INF\services\

Внутри этого файла вы пишете Имя вашего пользовательского провайдера - поэтому keycloak знает, что этот класс доступен как Protocol Mapper
В моем примере содержимое файла всего одна строка

com.stackoverflow.keycloak.custom.CustomOIDCProtocolMapper

Структура развертывания XML

В вашем собственном маппере вы используете файлы из keycloak. Чтобы использовать их, нам нужно сообщить jboss об этой зависимости. Поэтому создайте файл jboss-deployment-structure.xml внутри \src\main\resources\META-INF\ Содержание:

<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.keycloak.keycloak-services" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>

Сборка и развертывание вашего расширения

Создайте jar-файл вашего расширения (mvn clean package) - и поместите jar в /opt/jboss/keycloak/standalone/deployments/ и перезапустите keycloak

В лог-файле вы должны увидеть, когда он развернут, и (надеюсь, нет) сообщения об ошибках

Теперь вы можете использовать свой маппер - в моем примере я могу создать маппер в интерфейсе администратора keycloak и выбрать Stackoverflow Custom Protocol Mapper из выпадающего списка

Так же, как информация - это не полностью официально поддерживается keycloak - так что интерфейсы могут измениться в более поздних версиях

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

EDIT: Экспортированная структура файла Eclipse zip

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