Добавление авторизации в сторонний веб-сервис - PullRequest
2 голосов
/ 26 декабря 2011

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

Идея состоит в том, чтобы выставить точно такой же интерфейс (те же операции с теми же параметрами), но перехватывать каждый вызов для проверки безопасности, а затем вызывать исходный веб-сервис, если аутентификация действительна, или возвращать сообщение об ошибке или исключении в противном случае.Я пытался использовать Mule ESB для задачи, но я не могу туда добраться. Возможно ли это с мулом?Если нет, как бы я это сделал?Может кто-то указать мне верное направление?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 11 января 2012

http://www.webservicex.net/stockquote.asmx?wsdl дает тот же результат.Так что вы можете проверить это там.Возможно, проблема заключается в .net сервисах.

Во всяком случае, сейчас я сделал успешный прокси с шаблоном веб-сервиса.Сейчас я все еще работаю над преобразованием ответа.Не очень успешно, потому что Мул продолжает давать мне ReleasingInputStream в качестве ответа.

0 голосов
/ 27 декабря 2011

Вот пример прокси-сервера веб-службы, добавляющего WS-Security в незащищенный целевой веб-сервис:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:http="http://www.mulesoft.org/schema/mule/http"
  xmlns:cxf="http://www.mulesoft.org/schema/mule/cxf"
  xmlns:spring="http://www.springframework.org/schema/beans"
  xmlns:mule-ss="http://www.mulesoft.org/schema/mule/spring-security"
  xmlns:ss="http://www.springframework.org/schema/security"
  xsi:schemaLocation="
        http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/3.2/mule.xsd
        http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/3.2/mule-http.xsd
        http://www.mulesoft.org/schema/mule/cxf http://www.mulesoft.org/schema/mule/cxf/3.2/mule-cxf.xsd
        http://www.mulesoft.org/schema/mule/spring-security http://www.mulesoft.org/schema/mule/spring-security/3.2/mule-spring-security.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">

<mule-ss:security-manager>
    <mule-ss:delegate-security-provider
        name="memory-provider" delegate-ref="authenticationManager" />
</mule-ss:security-manager>

<spring:beans>
    <ss:authentication-manager alias="authenticationManager">
        <ss:authentication-provider>
            <ss:user-service id="userService">
                <ss:user name="user" password="pass" authorities="ROLE_USER" />
            </ss:user-service>
        </ss:authentication-provider>
    </ss:authentication-manager>
    <cxf:security-manager-callback id="serverCallback" />
</spring:beans>

<flow name="secureStockQuoteWsProxy">
    <http:inbound-endpoint address="http://localhost:8080/sec-ws/stockquote"
        exchange-pattern="request-response">
        <cxf:proxy-service>
            <cxf:inInterceptors>
                <spring:bean
                    class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
                <spring:bean
                    class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
                    <spring:constructor-arg>
                        <spring:map>
                            <spring:entry key="action" value="UsernameToken" />
                            <spring:entry key="passwordCallbackRef"
                                value-ref="serverCallback" />
                        </spring:map>
                    </spring:constructor-arg>
                </spring:bean>
            </cxf:inInterceptors>
        </cxf:proxy-service>
    </http:inbound-endpoint>

    <http:outbound-endpoint address="http://www.webservicex.net/stockquote.asmx"
        exchange-pattern="request-response">
        <cxf:proxy-client enableMuleSoapHeaders="false"
            soapVersion="1.2" />
    </http:outbound-endpoint>
</flow>

...