IBM MobileFirst Platform Foundation 7 - Аутентификация адаптера - обновление атрибутов идентификации пользователя

Я использую аутентификацию на основе адаптера для защиты ресурсов, а также для управления всей логикой аутентификации (проверка учетных данных). Если проверка пользователя / пароля прошла успешно, WL.Server.setActiveUser метод вызывается для создания аутентифицированного сеанса для области, где пользовательские данные хранятся в объекте userIdentity.

Процесс проверки пользователя / пароля возвращает OK/Fail, а также cookie-файл, если проверка прошла успешно. И этот файл cookie должен отправляться при следующих вызовах адаптера, поэтому я также добавляю его в объект данных userIdentity. Моя идея состояла в том, чтобы сохранить его в объекте userIdentity, так как его можно получить на других адаптерах (var userIdentity = WL.Server.getActiveUser();) для добавления значения cookie в заголовок запроса адаптера, и он работает правильно!

В чем проблема? Ответ адаптера может содержать новое значение для этого файла cookie, поэтому я должен обновить объект userIdentity для замены старого значения файла cookie новым значением. Тем не менее, объект userIdentity является неизменным, поэтому он всегда содержит исходный файл cookie, полученный процессом входа в систему.

Есть ли способ обновить объект userIdentity? В противном случае, как я могу управлять изменяемой таблицей для сохранения и обновления файла cookie, связанного с каждым сеансом пользователя, чтобы отправить его по запросу адаптера в серверную часть?

Есть ли лучший способ управления этим внутренним файлом cookie, который требуется для каждого запроса пользовательского адаптера?

Большое спасибо! Sergi

PS: есть вопрос, который пытается решить эту проблему, но возможный ответ мне не подходит ( IBM MobileFirst Platform Foundation 6.3: Можем ли мы редактировать пользовательские атрибуты объекта идентификации пользователя [MobileFirst Session]): я попробовал следующий код для Обновление userIdentity:

var newUserIdentity = {
        userId: userIdentity.userId, 
        attributes: {
            cookies: newValue
        }
};
WL.Server.setActiveUser(realm, null);
WL.Server.setActiveUser(realm, newUserIdentity);

Но когда он извлекается из другого адаптера (var userIdentity = WL.Server.getActiveUser()), он содержит оригинальное значение!

1 ответ

Решение
  1. Вы можете удалить userIdentity (WL.Server.setActiveUser("realm", null);), а затем установите новый активный объект пользователя.

  2. Если вы можете зависеть от HTTP-сеансов (один сервер или липкие сеансы), вы можете получить доступ к объекту сеанса и сохранить все, что захотите. (WL.Server.getClientRequest().getSession())

  3. Если вы не хотите использовать сеансы HTTP, вы можете использовать внешний механизм хранения, такой как SQL или Cloudant, для хранения этой информации. Вы можете использовать Client-ID в качестве идентификатора (см. Пример https://ibm.biz/BdXUHt).

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