Следуя этому руководству разработчика 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.
Но эта часть кода слишком много для чтения.Цените это, если кто-то может предоставить простой и лаконичный способ его реализации.