We were using Custom Login provider with keycloak 18 version and everything works fine.
But when we upgrade to keycloak version 19, Custom Login Provider is not getting invoked.
In the below example we can see that CustomProviderFactory create method should be invoked, it works well with keycloak 18 version, but its not working with keycloak 19 version. All the jboss deployment.xml are in place.
Ex
public class CustomProviderFactory extends FreeMarkerLoginFormsProviderFactory {
private FreeMarkerUtil freeMarker;
@Override
public LoginFormsProvider create(KeycloakSession session) {
return new CustomLoginFormsProvider(session, freeMarker);
}
@Override
public void init(Config.Scope config) {
freeMarker = new FreeMarkerUtil();
}
@Override
public void close() {
freeMarker = null;
}
@Override
public String getId() {
return "freemarker";
}
}
public class CustomLoginFormsProvider extends FreeMarkerLoginFormsProvider {
public LoginFormsProvider(KeycloakSession session, FreeMarkerUtil freeMarker) {
super(session, freeMarker);
}
@Override
protected void createCommonAttributes(Theme theme, Locale locale, Properties messagesBundle, UriBuilder baseUriBuilder, LoginFormsPages page) {
super.createCommonAttributes(theme, locale, messagesBundle, baseUriBuilder, page);
}
}
I'm using Keycloak 22.0.5
I needed to set these properties - I did this on the Keycloak start command line:
Where my factory class extends FreeMarkerLoginFormsProviderFactory
I did not use Freemarker for the string returned by
getId();I used my own ID.I made the ID like the class name for my class that extends
FreeMarkerLoginFormsProviderFor example, if my custom classes were named:
I made my
getId()method inMyGoodClassFactoryreturn my-good-class:So then the property settings would be:
Also, remember to create the file in {top level of
extension}/src/main/resources/META-INF/services/org.keycloak.forms.login.LoginFormsProviderFactoryand it should contain this one line (based on above example):Hope this helps.