#keycloak #authenticator
#keycloak #аутентификатор
Вопрос:
Keycloak 11.0.2
- Есть ли способ получить
UserSessionModel
назначение текущему сеансу единого входа в пользовательском аутентификаторе?
Я могу принять List<UserSessionModel>
:
List<UserSessionModel> userSessions = context.getSession().sessions().getUserSessions(context.getRealm(), context.getUser());
Но я не знаю, какое свойство фильтрации я могу использовать AutheticationFlowContext
для фильтрации списка и получения UserSessionModel текущего сеанса единого входа.
Теперь я фильтрую по UserSessionModel.id
извлеченному из cookie-файла запроса на аутентификацию KEYCLOAK_SESSION
(последний его сегмент). Может быть, есть прямой способ UserSessionModel.id
AuthenticationFlowContext
как-то использовать?
- Я должен использовать
UserSessionModel.getNote()
для извлечения UserSessionNotes, установленных ранее в других потоках аутентификации того же единого входа.
Прямой метод не работает для меня, чтобы использовать UserSessionNotes
set в других потоках аутентификации (но в том же SSO):
@Override
public void authenticate(AuthenticationFlowContext context) {
Map<String,String> sessionNotes = context.getAuthenticationSession().getUserSessionNotes();
// sessionNotes does not reflect notes set in another Authentication flows of the same SSO
...
}
Итак, если кто-то знает другой способ принять UserSessionNotes
w / o UserSessionModel
, это также будет решением.
Ответ №1:
Я получил ответ на форуме Keycloak https://keycloak.discourse.group/t/getting-usersessionnotes-returns-null-while-data-persist/5172
Для получения UserSessionModel
текущего единого входа в аутентификаторе:
@Override
public void authenticate(AuthenticationFlowContext context) {
UserSessionModel userSessionModel;
AuthenticationManager.AuthResult authResult = AuthenticationManager.authenticateIdentityCookie(context.getSession(),
context.getRealm(), true);
if (authResult != null) {
// That is it:
userSessionModel = authResult.getSession();
}