Надеюсь, это пошаговое руководство поможет вам
Я использую Keycloak 4.5.0 - потому что у меня установлена эта более новая версия - но я не должен иметь большого значения. И я реализовал OIDCProtocolMapper
в примере.
Просто для краткого изложения - для быстрого обзора для других - каждый шаг описан более подробно позже
Вы реализуете класс CustomProtocolMapper на основе
AbstractOIDCProtocolMapper
META-INF / services Файл с
имя org.keycloak.protocol.ProtocolMapper
должно быть доступно и
содержит имя вашего картографа
jboss-deployment-structure.xml
должны быть доступны для использования
брелок встроенный в классах
Файл 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