Как ограничить доступ ко всему, кроме wsdl? - PullRequest
4 голосов
/ 06 сентября 2011

У меня есть веб-сервис, развернутый под Tomcat 6, он отлично работает. Теперь я хочу аутентифицировать любого клиента, но держу wsdl в открытом доступе через URL, например http://localhost:8080/services/MyService?wsdl

Я пытался решить проблему таким способом (web.xml в веб-приложении), но это не работает:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>WSDL access - to anybody</web-resource-name>
        <url-pattern>/services/MyService?wsdl</url-pattern>
    </web-resource-collection>

    <auth-constraint><role-name>*</role-name></auth-constraint>      
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Some authentification required</web-resource-name>
        <url-pattern>/services/MyService</url-pattern>
    </web-resource-collection>

    <auth-constraint><role-name>somebody</role-name></auth-constraint>          
</security-constraint>

Единственное решение, которое я вижу сейчас, - это создать дополнительный сервлет и дать одно право на доступ к WSDL. Сервлет передаст требуемый wsdl клиенту, независимо от того, аутентифицирован он или нет. В этом случае URL WSDL не будет очевидным, поэтому мне не нравится решение. Любые другие советы, пожалуйста?

Ответы [ 3 ]

8 голосов
/ 04 июня 2013

У меня была похожая проблема, и я нашел решение. Методы WebServices вызываются через POST, а WSDL выбирается через GET. Таким образом, решение состоит в том, чтобы ограничить только доступ POST.

security-constraint>
    <web-resource-collection>
        <web-resource-name>Some authentification required</web-resource-name>
        <url-pattern>/services/MyService</url-pattern>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint><role-name>somebody</role-name></auth-constraint>          
</security-constraint>

Я использую WebSphere 7 с JAXWS, но конфигурация web.xml одинакова для всех контейнеров и серверов приложений.

1 голос
/ 06 сентября 2011

Вы пытаетесь обеспечить безопасность на транспортном уровне. Если вы пытаетесь защитить свои отдельные службы с помощью ws-security - вы можете оставить wsdl открытым, пока служба защищена ...

0 голосов
/ 28 января 2016

У меня есть приложение, настроенное таким образом. У меня есть страница входа, которая будет аутентифицировать пользователя с помощью идентификатора пользователя и пароля. Только когда действительный пользователь войдет в систему, он получит доступ к данным и страницам. Любое подключение к WSDL не будет затронуто, так как оно будет обрабатываться вызовами функции WSDL.

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