Дайджест-аутентификация с помощью CORS в Tomcat

Прямо сейчас я создаю API для отдыха, работающий на Tomcat 8, который использует CorsFilter Apache для разрешения междоменных запросов, которые я установил в своем web.xml следующим образом:

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/webapi/*</url-pattern>
</filter-mapping>

До сих пор так просто, теперь я хотел добавить дайджест-аутентификацию в свой Rest-API, да, дайджест НЕ базовый!

Для простого использования я хотел использовать ограничения безопасности в файле web.xml:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>all</web-resource-name>
        <url-pattern>/webapi/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>DIGEST</auth-method>
    <realm-name>UserDatabase</realm-name>
</login-config>

Аутентификация и фильтр CORS прекрасно работают сами по себе, но здесь начинается проблема: ограничение безопасности выполняется контейнером сервлета перед фильтром CORS. Таким образом, алгоритм аутентификации не устанавливает необходимые CORS (заголовки междоменных запросов) в заголовках аутентификации Digest, в результате CORS-запрос завершится ошибкой при аутентификации, потому что страница дайджеста 401 с «вызовом» (nonce, qop, realm и т. д.) отсутствуют необходимые заголовки для междоменного запроса. Есть ли у кого-нибудь решение или реализация этой проблемы? Или мне действительно нужно реализовать свой собственный дайджест-фильтр из-за CORS?!


person Andi    schedule 01.11.2015    source источник


Ответы (1)


Вы можете попробовать переопределить CorsFilter как Tomcat клапан и сделать убедитесь, что он настроен для запуска перед клапаном Digest Authenticator .

person Igor Mukhin    schedule 01.11.2015