WSO2IS 5.10.0. Обновление lastLoginTime в пользовательском локальном аутентификаторе

Я написал свой собственный локальный аутентификатор. Когда я использовал его, lastLoginTime не обновляется. Регистрация с базовым аутентификатором в порядке.

Какое расширение отвечает за обновление lastLoginTime? Что мне нужно сделать в моем аутентификаторе, чтобы обновить lastLoginTime? Спасибо!

Обновлять: Я создал собственный аутентификатор для использования с учетными данными пользователя, которые аутентификатор получает из XML-подписи. Аутентификатор получает XML, проверяет подпись, извлекает special_user_id, а затем проверяет этот идентификатор в UserStroe в пользовательском утверждении. Если пользователь с этим значением утверждения существует, то аутентификатор получает user_name из хранилища пользователей и успешно завершает processAuthenticationResponse().

Суммируя

processAuthenticationResponse() {

...

String[] logins = userStoreManager.getUserList("http://wso2.org/claims/special_user_id", specialUserIdValue, "default");

context.setSubject(AuthenticatedUser.createLocalAuthenticatedUserFromSubjectIdentifier(logins[0]));
}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В IS-5.10.0 время последнего входа в систему обновляется только в том случае, если функция приостановки простоя пользователя https://is.docs.wso2.com/en/5.10.0/learn/user-account-suspension/ включена. включено.

IS-5.10.0 содержит компонент управления идентификацией версии 1.4.1. Вот строки кода, связанные с обновлением времени последнего входа в систему https://github.com/wso2-extensions/identity-governance/blob/57e510a61dc9042b55ffa0cbdceb13f508519f3a/components/org.wso2.carbon.identity.account.suspension.notification. task/src/main/java/org/wso2/carbon/identity/account/suspension/notification/task/handler/AccountSuspensionNotificationHandler.java#L84-L85

Неважно, используете ли вы базовый аутентификатор или настраиваемый аутентификатор. Если вы включили функцию приостановки учетной записи пользователя в режиме ожидания, при каждом событии POST_AUTHENTICATION следует вызывать событие handleEvent этого AccountSuspensionNotificationHandler и обновлять время последнего входа в систему.

ПРИМЕЧАНИЕ. В IS-5.11.0 изменена логика обновления значения времени последнего входа в систему. Его можно обновить независимо от функции приостановки учетной записи неактивного пользователя. Проверяйте https://github.com/wso2/product-is/issues/4515


Обновлять:

  • Вот причина, по которой событие POST_AUTHENTICATION не срабатывает при использовании пользовательского аутентификатора.
  • Если вы используете базовый аутентификатор, пользователь аутентифицируется из пользовательского хранилища IS, подключающегося через менеджера пользовательского хранилища.

После аутентификации в пользовательском магазине https://github.com/wso2/carbon-kernel/blob/56d068221ab46e205d5b7188e2bc55134bfc08a9/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/ user/core/common/AbstractUserStoreManager.java#L1757 вызывается настроенный метод слушателей doPostAuthenticate. Событие POST_AUTHENTICATION запускается методом IdentityMgtEventListener, doPostAuthenticatehttps://github.com/wso2-extensions/identity-governance/blob/57e510a61dc9042b55ffa0cbdceb13f508519f3a/components/org.wso2.carbon.identity.governance/src/main/ java/org/wso2/carbon/identity/governance/listener/IdentityMgtEventListener.java#L122-L127

  • Поскольку описанный выше поток не выполняется, когда вы используете пользовательский аутентификатор, который не аутентифицирует пользователя из пользовательского хранилища WSO2 IS, событие POST_AUTHENTICATION не запускается.

Возможные варианты запуска события POST_AUTHENTICATION из пользовательского аутентификатора.

  1. Переопределите метод public AuthenticatorFlowStatus process(HttpServletRequest request, HttpServletResponse response, AuthenticationContext context) throws AuthenticationFailedException, LogoutFailedException { на пользовательский аутентификатор с той же логикой, что и в методе AbstractApplicationAuthenticator. Затем добавьте
fireEvent(context, IdentityEventConstants.Event.POST_AUTHENTICATION, true);

до

return AuthenticatorFlowStatus.SUCCESS_COMPLETED;

похоже на https://github.com/wso2/carbon-identity-framework/blob/527dba704487431b95c34461656cdb7496a0f0cc/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/ org/wso2/carbon/identity/application/authentication/framework/AbstractLocalApplicationAuthenticator.java#L80-L81

  1. Расширьте свой собственный аутентификатор с AbstractLocalApplicationAuthenticator вместо AbstractApplicationAuthenticator. Обратите внимание, что в этих двух классах существуют различия в методе процесса аутентификации.

Спасибо! Да, функция блокировки пользователя включена. Когда я вошел в систему с пользователем и паролем, время последнего входа в систему обновляется. Все работает. Но с пользовательским аутентификатором событие POST_AUTHENTICATION не запускается. Как вызвать событие POST_AUTHENTICATION?

Olegon 10.01.2023 08:32

Какому руководству вы следовали, чтобы написать собственный аутентификатор? Это пользовательский локальный аутентификатор или федеративный аутентификатор? Какой абстрактный аутентификатор вы расширили?

Anuradha Karunarathna 10.01.2023 09:02

Это руководство: is.docs.wso2.com/en/latest/references/extend/federation/… extends AbstractApplicationAuthenticator реализует метод LocalApplicationAuthenticator, processAuthenticationResponse завершен без ошибок. Я не использую userStoreManager.authenticate

Olegon 10.01.2023 09:07

Проверьте раздел «обновление» опубликованного ответа, чтобы увидеть причину, по которой событие POST_AUTHENTICATION не вызывается в вашем случае, и возможное решение.

Anuradha Karunarathna 10.01.2023 16:11

Однако у меня есть сомнения по поводу управления пользователями в вашей настройке. Согласно комментариям, вы не аутентифицируете пользователей через менеджер хранилища пользователей, но поддерживаете пользователей в хранилище пользователей для управления списком пользователей/профилем. По какой причине не используется userStoreManager.authenticate?

Anuradha Karunarathna 10.01.2023 16:17

Большое спасибо! Я думаю, это то, что мне нужно. Я создал собственный аутентификатор для использования с учетными данными пользователя, которые аутентификатор получает из XML-подписи. Аутентификатор получает XML, проверяет подпись, извлекает special_user_id, а затем проверяет этот идентификатор в UserStroe в пользовательском утверждении. Если пользователь с этим значением утверждения существует, то аутентификатор получает user_name из хранилища пользователей и успешно завершает processAuthenticationResponse().

Olegon 10.01.2023 17:57

Добавлено обновление к вопросу.

Olegon 10.01.2023 18:04

Другие вопросы по теме