Судя по цепочке комментариев, проблема в том, что провайдер не подхватывается Keycloak. У вас есть несколько вариантов связывания собственного провайдера с Keycloak: в виде модуля или в виде развернутого файла war / ear / jar в каталоге развертывания.
Вот как это сделать как модуль:
Вам потребуется добавить некоторую конфигурацию (module.xml
) и ваш jar-файл в структуру каталогов модулей. Это должно выглядеть примерно так:
(keycloak root)
|- modules
|- system
|- layers
|- keycloak
|- com
|- yourcompany
|- yourmodule
|- main
|- your-module-name.jar
|- module.xml (see below)
Ваш module.xml
должен выглядеть примерно так:
<?xml version="1.0" encoding="UTF-8"?>
<module name="com.yourcompany.yourmodule" xmlns="urn:jboss:module:1.6">
<resources>
<resource-root path="your-module-name.jar"/>
</resources>
<dependencies>
<!-- whatever module dependencies you need go here -->
<!-- these are just an example; you may or may not need them -->
<module name="org.jboss.logging" />
<module name="org.keycloak.keycloak-core"/>
<module name="org.keycloak.keycloak-services"/>
<module name="org.keycloak.keycloak-server-spi"/>
<module name="org.keycloak.keycloak-server-spi-private"/>
</dependencies>
</module>
Кроме того, вам необходимо настроить standalone.xml
и / или, возможно, standalone-ha.xml
в зависимости от вашего сценария (по умолчанию в образе док-станции Keycloak Docker используется -ha.xml
по умолчанию). Соответствующий раздел должен выглядеть примерно так:
<subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
<web-context>auth</web-context>
<providers>
<provider>
classpath:${jboss.home.dir}/providers/*
</provider>
<!-- add this -->
<provider>
module:com.yourcompany.yourmodule
</provider>
<!-- end add -->
</providers>
<master-realm-name>master</master-realm-name>
<scheduled-task-interval>900</scheduled-task-interval>
...
</subsystem>
Наконец, как вы упомянули, вам понадобится правильная конфигурация в каталоге META-INF / services: файл с полным именем класса ProviderFactory, как определено SPI, с одной строкой, содержащей полное имя класса ваша реализация. В вашем случае файл должен называться org.keycloak.forms.login.LoginFormsProviderFactory
, а его значение должно быть одной строкой: (com.yourpackage).KeycloakFreeMarkerLoginProviderFactory
Если он поднят, вы сможете увидеть его в списке провайдеров в пользовательском интерфейсе администратора. Для просмотра войдите в консоль администратора, щелкните свое имя пользователя в правом верхнем углу и выберите «Информация о сервере», затем перейдите на вкладку «Поставщики». Вы должны увидеть своего провайдера в списке «логин».