Websphere8.5 j2ee выходит из системы единого входа

В среде разработки я хочу дать тестировщикам возможность выйти из системы, которая в конечном итоге станет средой единого входа, чтобы войти в систему как другой пользователь с другими разрешениями.

Мой сервер websphere использует локальный федеративный репозиторий с использованием LTPA.

Когда пользователь пытается получить доступ к ресурсу с ограниченным доступом, ему выдается приглашение для входа в модальное диалоговое окно. Учетные записи пользователей и групповые разрешения работают точно так, как ожидалось. На данный момент все пока так хорошо.

Пытаясь вывести пользователя из системы, я пробовал HttpSession.invalidate(), HttpServletRequest.logout(), используя действие ibm_security_logout, WSSecurityHelper.revokeSSOCookies(HttpServletRequest, HttpServletResponse), с истечением срока действия всех файлов cookie запросов как со стороны сервера, так и со стороны клиента.

Пока сеанс истекает, я не получаю нового приглашения для входа в систему. Что-то запоминает пользователя.

Документация подразумевает, что ibm_security_logout аннулирует токен LTPA.

WSSecurityHelper.revokeSSOCookies устарел, и я не могу найти информацию о том, что его заменило. Документация, которую я нашел, предполагает, что она была актуальна для WAS 6, но я вижу, что она больше не работает.

Могу ли я заставить браузер и сервер забыть о пользователе, не заставляя моих тестировщиков закрывать свои браузеры?


person tzimnoch    schedule 10.07.2014    source источник


Ответы (1)


Я предполагаю, что под modal dialog login prompt вы имели в виду всплывающее окно из браузера, отображаемое во время базовой HTTP-аутентификации. К сожалению, в этом случае браузер сохраняет учетные данные пользователя и повторно отправляет их с каждым запросом, поэтому вы не получаете новое приглашение для входа.

Чтобы иметь возможность выйти из системы, ваше приложение должно использовать аутентификацию на основе форм — вам нужно создать страницу входа и изменить web.xml вашего приложения следующим образом:

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/login.jsp</form-error-page>
    </form-login-config>
</login-config>

Ваша страница входа должна содержать следующую форму (упрощение):

<form action="j_security_check" method="post">
  Username: <input type="text" name="j_username" size="20"><br>
  Password: <input type="password" name="j_password" size="20"><br>
  <input type="submit" value="Login">
</form>

Чтобы выйти из системы в этом случае, у вас есть 2 варианта:

Выход из формы

В этом случае вам необходимо создать форму выхода, которая должна быть размещена на ibm_security_logout с необязательным параметром страницы перенаправления. Это приведет к удалению сеанса и файла cookie LTPA. Подробнее см. на этой странице. (ищите форму выхода).

<form method=POST action="ibm_security_logout" name="logout">
    <input type="submit" name="logout" value="Logout">
    <input type="hidden" name="logoutExitPage" value="/login.jsp">
</form>

Пользовательский выход

В этом случае вы создаете свой собственный сервлет, который будет обрабатывать выход из системы, и вместо использования revokeSSOCookies просто вызываете метод request.logout(), доступный в Servlet 3.0 API. Подробности описаны в методах защиты сервлетов, но в целом это:

  • Очищает файлы cookie LTPA, если включена система единого входа.
  • Делает недействительным сеанс HTTP
  • Удаляет пользователя из кеша аутентификации
  • Удаляет тему пользователя из треда
  • Очищает вызывающего абонента и темы вызова
  • Устанавливает тип аутентификации на null

И последний комментарий: если вы включите единый вход (например, с помощью SPNEGO), ваши пользователи будут автоматически входить в систему, и по умолчанию они не смогут выйти и войти в систему как разные пользователи. Вам нужно будет выполнить пользовательскую настройку, но это тема для другого вопроса ;-)

person Gas    schedule 11.07.2014