#authentication #single-sign-on #token #keycloak
#аутентификация #единый вход #токен #keycloak
Вопрос:
Я хочу иметь возможность аннулировать любой токен действия для пользователя в потоке аутентификации.
Сценарий заключается в том, что пользователь отправляет пароль для сброса и получает электронное письмо с соответствующим токеном действия. Затем пользователь отправляет другой пароль для сброса и получает другое электронное письмо с другим связанным токеном действия. В течение срока действия первого токена действия пользователь может использовать ссылки в обоих электронных письмах — однако я хотел бы иметь возможность идентифицировать в моем пользовательском потоке аутентификации для сброса пароля, что пользователь запрашивает дублирующий запрос на действие, и аннулировать их предыдущие токены действия, чтобы работала только их последняя ссылка для сброса пароля.
Я просматривал приведенные ниже объекты, но мне не повезло найти хранилище токенов действия, связанное со всей активностью пользователя, а не только с их текущим сеансом аутентификации.
AuthenticationFlowContext context;
List<UserSessionModel> sessions = context.getSession().sessions().getUserSessions(context.getRealm(), user);
RootAuthenticationSessionModel parentSessions = context.getAuthenticationSession().getParentSession();
ActionTokenStoreProvider actionTokenStore = session.getProvider(ActionTokenStoreProvider.class);
Заранее спасибо.
Ответ №1:
Я решил эту проблему, поддерживая таблицу пользователей и токенов действия для каждого потока. Это означает, что когда пользователь инициирует новый поток действий, я могу захватить предыдущий токен, если он все еще действителен, и использовать ActionTokenStoreProvider, чтобы аннулировать его, заменив его новым токеном. Я все еще надеюсь, что keycloak имеет какой-то внутренний механизм для управления этим, а не мой собственный пользовательский код. Отбросьте решение, если вы знаете об этом!