У нас есть 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, я надеюсь, что сообщество сможет пролить свет на то, как этого добиться, и является ли это хорошей идеей.