Как написать простую оболочку транзакции в расширении Keycloak SPI? - PullRequest
0 голосов
/ 23 мая 2019

Следуя этому руководству разработчика Keycloak, я пытался написать расширение SPI, которое поможет объединить пользовательскую службу пользователя (представьте, что это хранилище данных с кучей CRUD REST API, обрабатывающих пользовательские данные)в брелок.

Один базовый сценарий, которого я хотел достичь, заключается в том, что, когда новый пользователь входит в систему через Keycloak, его / его информация должна распространяться в пользовательскую службу пользователя путем создания пользовательской записи.

Byреализуя интерфейс UserRegistrationProvider, у меня есть метод ниже в моем провайдере.

    @Override
    public UserModel addUser(RealmModel realm, String username) {
        log.infov("Adding new user: username={0}", username);
        User user = new User();
        // do something to populate the user object with additional attributes, e.g. those edited via the Keycloak console UI
        UserModel userModel = createAdapter(realm, user);
        return userModel;
    }

Странно то, что этот метод интерфейса принимает только аргумент username в виде строки.Я не знаю, как получить доступ к другим атрибутам пользователя.Я нашел ниже два сообщения по этому вопросу.

Метод добавления объекта значения UserRegistrationProvider

Пользовательская федерация - веб-служба

Ответ команды Keycloak заключается в том, что оболочка транзакцииможет применяться для сохранения изменений, только когда транзакция зафиксирована.Хороший пример - официальная реализация для федерации LDAP.И это является исходным кодом для транзакции LDAP.

Но эта часть кода слишком много для чтения.Цените это, если кто-то может предоставить простой и лаконичный способ его реализации.

1 Ответ

0 голосов
/ 04 июня 2019

Прочитав исходный код Keycloak на провайдере LDAP, я выяснил, что шаг сохранения данных может произойти в настраиваемой транзакции , которая зачислена после основной транзакции.

Упомянутое выше хранилище является провайдером хранилища ключей Keycloak на основе файлов, с которым я экспериментировал.Надеюсь, что это может дать некоторое представление об этом.

...