Пользовательская федерация пользователей не добавляется в панель администратора keycloak

#spring-boot #single-sign-on #keycloak #java-11

#spring-boot #единый вход #keycloak #java-11

Вопрос:

Я реализовал своего поставщика пользовательского хранилища следующим образом:

 public class UserStorageProvider implements org.keycloak.storage.UserStorageProvider, UserLookupProvider, CredentialInputValidator {

    public UserStorageProvider(KeycloakSession session) {
        this.session = session;
    }

    public UserStorageProvider(KeycloakSession session, ComponentModel model) {
        this.session = session;
        this.model = model;
    }

    protected KeycloakSession session;
    protected ComponentModel model;

    @Override
    public boolean isConfiguredFor(RealmModel realm, UserModel user, String credentialType) {
        return true;
    }

    @Override
    public boolean supportsCredentialType(String credentialType) {
        return true;
    }

    @Override
    public boolean isValid(RealmModel realm, UserModel user, CredentialInput input) {
        return true;
    }

    @Override
    public UserModel getUserByUsername(String username, RealmModel realm) {
        //here to fetch user from my DB.
        return null;
    }

    @Override
    public UserModel getUserById(String id, RealmModel realm) {
        StorageId storageId = new StorageId(id);
        String username = storageId.getExternalId();
        return getUserByUsername(username, realm);
    }

    @Override
    public UserModel getUserByEmail(String email, RealmModel realm) {
        return null;
    }

    public void close() {

    }
}
  

и его заводской класс:

 public class UserStorageProviderFactory implements org.keycloak.storage.UserStorageProviderFactory<UserStorageProvider> {

    public static final String PROVIDER_NAME = "user-provider";


    @Override
    public String getHelpText() {
        return "JPA Example User Storage Provider";
    }

    @Override
    public List<ProviderConfigProperty> getConfigProperties() {
        return null;
    }

    @Override
    public UserStorageProvider create(KeycloakSession keycloakSession) {
        return new UserStorageProvider(keycloakSession);
    }

    @Override
    public UserStorageProvider create(KeycloakSession keycloakSession, ComponentModel componentModel) {

        UserStorageProvider provider = new UserStorageProvider(keycloakSession, componentModel);
        provider.session = keycloakSession;
        provider.model = componentModel;
        return provider;
    }

    @Override
    public String getId() {
        return PROVIDER_NAME;
    }

    @Override
    public void init(Config.Scope config) {

    }

    @Override
    public void postInit(KeycloakSessionFactory factory) {

    }

    @Override
    public void close() {

    }
}
  

и org.keycloak.storage.UserStorageProviderFactory файл находится на, META-INF/services/ а его содержимое:

com.kian.neshan.userfederation.UserStorageProviderFactory

Итак, я создаю jar by mvn clean package и помещаю его в папку хранилища keycloak, но когда я захожу в панель администратора, мой провайдер не добавляется в опцию объединения пользователей

Где не так?

Комментарии:

1. Есть ли какие-либо журналы об инициализации развертывания?

Ответ №1:

Весь мой модуль правильный.

Проблема заключается в том, что local-keycloak-docker-image должен быть удален после любых изменений модуля

Keycloak запускается docker-compose, а его изображения создаются с помощью Dockerfile, поэтому после любых изменений моего модуля local-keycloak-image следует удалить, sudo docker rmi [local-image-name] чтобы перестроить образ, чтобы получить новейший файл my jar и поместить его в папку развертывания local-docker-image.