Перезапись заголовков авторизации входящего Java-сервера перед аутентификацией - PullRequest
0 голосов
/ 17 февраля 2011

У нас есть REST API, поставляемый через Apache Tomcat, с которым веб-приложение Flash предназначено для связи.

Аутентификация выполняется с помощью базовой аутентификации по SSL (хотя пароль внутри базовой аутентификации - SHA-2 'ред).Проблема заключается в том, что использование базовой аутентификации для клиента Flash приводит к появлению стандартного поля входа в браузер из-за «WWW-Authentication: Basic» в заголовке.Flash не может обойти это, вручную установив заголовок Authorization перед запросом.

Другие клиенты должны иметь возможность аутентификации с помощью существующих механизмов, поэтому переписывание логики аутентификации не будет идеальным.

У меня есть идея, что заголовки авторизации, отправленные и полученные от клиента Flash, могут быть динамически переписаны, чтобы использовать другое имя для базовой аутентификации, что заставит браузер не понимать механизм аутентификации и не отображать диалоговое окно.Заголовки аутентификации в Tomcat и из Tomcat можно переписать с «WWW-Authenticate: Basic» на «WWW-Authenticate: PretendBasic», но в идеале встроенная защита контейнера все еще может обрабатывать базовую аутентификацию после перезаписи.

Я написалфильтр для перезаписи входящих заголовков как «WWW-Authenticate: PretendBasic» как «WWW-Authenticate: Basic» в надежде на то, что следующая цепочка фильтров будет auth и запрос будет обработан как обычно.К сожалению, в спецификации сервлета указано, что фильтр не может быть вставлен до аутентификации.Я думаю, что единственная возможность этой работы - создать стекируемый модуль аутентификации JAAS, который сначала выполнил бы перезапись заголовка по запросам, если они поступили от клиента Flash, а затем передавал бы аутентификацию в существующие системы безопасности, управляемые контейнером.

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

Ответы [ 2 ]

0 голосов
/ 29 марта 2011

Я бы подумал, что включение аутентификации через WWW-Authenticate, как имитация HTTP Basic, сработает.

Если у вас в данный момент работает аутентификация HTTP Basic, просто добавьте еще один аутентификатор, который выполняет HTTP Basic, но вместо заголовка WWW-Authenticate вместо заголовка Authorization.

Затем вы можете включить заголовок во Flash и игнорировать HTTP Basic в этом клиенте.

Я сделал аналогичное, используя 3 разные схемы аутентификации, на Jetty. Я не уверен, каким будет путь Tomcat.

0 голосов
/ 17 февраля 2011

Если ваше флэш-приложение всегда работает с сервером, защищенным с помощью basic, оно может запросить учетные данные до создания первого запроса к веб-службам. Таким образом, первый запрос уже будет содержать заголовок аутентификации, и вы не получите 401 в ответ.

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