Я создаю веб-сервис RESTful (JBoss + RESTeasy). Программист пользовательского интерфейса пишет веб-приложение Ajax, которое будет его использовать. Веб-приложение будет одной HTML-страницей со всем, что сделано на JavaScript. В целях безопасности весь трафик проходит через SSL.
В настоящее время я использую обычную аутентификацию. Программист пользовательского интерфейса может показать диалоговое окно, чтобы получить имя пользователя и пароль, и поместить «Authorization: Basic xxxxx» в заголовок. К сожалению, если пароль неверный, откроется диалоговое окно для входа в браузер. Также нет возможности для пользователя выйти из системы. Это недопустимо.
Кажется, что нет никакого способа перехватить ответ 401 на запрос XMLHttpRequest ни в одном из браузеров, которые мы будем использовать.
Проверка подлинности на основе форм не будет работать для нас. Нам нужен автоматический выход из системы после некоторого периода бездействия (эквивалент тайм-аута сеанса). Мы не можем заставить сервер внезапно вернуть страницу входа в систему, когда клиент ожидает объект JSON.
JBoss предлагает четыре стратегии аутентификации: BASIC, FORM, CLIENT-CERT и DIGEST. Я думаю, что DIGEST имеет ту же проблему, что и BASIC. Ни один из четырех не является тем, что мы хотим.
Это веб-приложение будет единственным клиентом (на данный момент), поэтому нет необходимости использовать BASIC. Есть ли какая-либо другая стратегия аутентификации, которую я могу установить? Например, есть ли реализация WSSE UsernameToken, которую я могу использовать? (Как описано в главе 8 книги O'Reilly RESTful Web Services.) Сервер будет отправлять «WSSE» вместо «Basic» в заголовке WWW-Authenticate, и, по-видимому, браузер будет игнорировать его и передавать через него.
Я хочу настроить безопасность там, где она есть - в файлах конфигурации JBoss, а не в моей веб-службе RESTful - поэтому я ищу реализацию, которую можно просто подключить к JBoss.