Я только что реализовал эту функцию для нашего KC, мы использовали подход REST API.«Суперпользователь» должен быть авторизован (действительный сеанс KC).Затем они могут начать сеанс олицетворения, мы решили использовать имя пользователя, чтобы найти олицетворяющего.После того, как вы подтвердите существование человека в области KC, вы можете создать UserSessionModel
для этого человека.Затем, создав файл cookie для входа в систему, я узнал, что в KC AuthenticationManager
есть небольшой метод, который создает файл cookie для входа в систему и добавляет его в заголовки ответа (очень круто).Затем я сохранил свои учетные данные (суперпользователь) в файле cookie и возвратил ответ с добавленными файлами cookie.Метод return REST очень похож, процесс, который он принимает, отличается, потому что нам нужно передать куки обратно и получить идентификатор суперпользователя и идентификатор его сеанса.Если у вас есть те, которые вы просто повторите первый метод (найти пользователя, найти сеанс вместо создания нового, если время старого сеанса не истекло), перенаправьте обратно на источник.О, также не забудьте завершить сеанс олицетворения.
personYouImpersonatedSessionId = session.sessions().getUserSession(RealmModel,AuthSessionId)
if(!personYouImpersonatedSessionId) {
session.sessions().removeUserSession(RealmModel,personYouImpersonatedSessionId)
}
Я забыл сделать это во время тестирования и столкнулся с некоторыми проблемами.Я знаю, что пост старый, но есть люди, которые все еще ищут информацию такого типа: D
Надеюсь, это поможет