Как заставить undertow НЕ использовать авторизацию для открытого ресурса, когда авторизация включена в запрос?

#authentication #basic-authentication #wildfly #undertow

#аутентификация #basic-аутентификация #wildfly #undertow

Вопрос:

Использование Wildfly 8.1.0.Final

Я хочу создать веб-приложение, для которого требуется базовая аутентификация для доступа к /api/*, но остальная часть приложения должна быть открыта. Для достижения этой цели у меня есть следующее web.xml:

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Api access</web-resource-name>
            <url-pattern>/api/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>api</role-name>
        </auth-constraint>
    </security-constraint>

    <security-role>
        <role-name>api</role-name>
    </security-role>

    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>Authentication requires api access</realm-name>
    </login-config>
</web-app>
  

Тестирование с помощью браузера, это работает так, как ожидалось.

 http://localhost:8080/myapp/api
  

…требуется аутентификация.

 http://localhost:8080/myapp 
  

…не требует аутентификации.

Здесь начинается сложная часть:

Третья сторона обращается к /myapp и включает заголовок авторизации в запрос:

 Authorization: Basic ZGlsbDpkYWxs
  

Это не пользователь, зарегистрированный в wildfly, но это не должно иметь значения, потому что /myapp открыт и не требует авторизации. Однако происходит следующее:

 401 Unauthorized
  

Почему? Я не говорил undertow использовать какие-либо ограничения безопасности для / myapp, но по умолчанию он использует ограничения безопасности, которые я зарегистрировал для / myapp / api

Это новое поведение, которое было введено с undertow, потому что с Jboss КАК 7.1.1.Final этого не произошло.

Как я могу сказать undertow не использовать авторизацию для открытого ресурса, когда авторизация включена в запрос?

Ответ №1:

Я могу подтвердить проблему с WildFly 8.1.0.Final. GlassFish 4.0 не отвечает 401 в том же сценарии.

Я отправил проблему: https://issues.jboss.org/browse/WFLY-3590