REST-сервисы: базовое время ожидания сеанса аутентификации
Я работаю над полноценным веб-сервисом с использованием обычной аутентификации. В веб-XML у меня есть следующее:
<security-constraint>
<web-resource-collection>
<web-resource-name>Services</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>User</role-name>
</auth-constraint>
</security-constraint>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
Это работает, как и ожидалось: пользователь должен указать пароль при взаимодействии с сервисом.
Однако, чтобы соответствовать более RESTful-стандартам, я думаю, что это действительно должна быть служба без сохранения состояния, в которой сеанс никогда не создается. Другими словами, я хотел бы заставить клиентов предоставлять свои учетные данные для каждого запроса.
Если в web-xml установить тайм-аут сеанса на 0, это интерпретируется как "никогда не истекает", что является полной противоположностью того, что я хочу.
Есть ли простой способ заставить сессию немедленно аннулироваться?
1 ответ
Вам не нужен элемент
Вы испытываете, как браузеры реализуют протокол аутентификации.
Вкратце базовая аутентификация (rfc 2617) работает так:
- Клиент запрашивает некоторый ресурс.
Сервер распознает, что ресурс имеет ограничение безопасности. Поэтому он отправляет HTTP 401 "Требуется авторизация". Заголовок содержит что-то вроде...
WWW-Authenticate: Basic realm="Protected"
Клиент повторно отправляет свой запрос, но на этот раз с учетными данными (в кодировке base64) в заголовке, например...
Authorization: Basic dG9tY2F0OnMzY3JIdA==
Сервер аутентифицирует запрос на основе заданных учетных данных и отправляет запрошенный ресурс.
Чтобы сделать просмотр веб-страниц удобным для людей, практически каждый браузер кэширует учетные данные, пока браузер не будет закрыт. Каждый раз при перезагрузке страницы в браузере отправляется запись "Авторизация" с заголовком запроса. Поэтому при тестировании веб-службы с помощью браузера у вас больше не запрашиваются ваши учетные данные.
С Firefox вы можете контролировать это поведение. Проверьте обсуждение о Firefox быстро забыть HTTP Basic Auth.