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 ответ
Вы можете удалить userIdentity (
WL.Server.setActiveUser("realm", null);
), а затем установите новый активный объект пользователя.Если вы можете зависеть от HTTP-сеансов (один сервер или липкие сеансы), вы можете получить доступ к объекту сеанса и сохранить все, что захотите. (
WL.Server.getClientRequest().getSession()
)Если вы не хотите использовать сеансы HTTP, вы можете использовать внешний механизм хранения, такой как SQL или Cloudant, для хранения этой информации. Вы можете использовать Client-ID в качестве идентификатора (см. Пример https://ibm.biz/BdXUHt).