Ajax-аутентификация, не позволяющая браузеру открывать диалоговое окно входа - PullRequest
6 голосов
/ 24 октября 2009

Я создаю веб-сервис 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.

1 Ответ

7 голосов
/ 24 октября 2009

Браузер не будет отображать диалоговое окно пароля, если он не распознает схему аутентификации в заголовке WWW-Authenticate. Лучше всего продолжать использовать базовую аутентификацию на сервере, задав вручную для заголовка что-то вроде «Basic / MyApp» для 401 ответа.

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