2011-12-26 7 views
2

私はいくつかのサードパーティのWebサービスを持っていますが、それらのWSDLのみがあります。現在、私の内部ネットワークでのみアクセス可能です。私はこれらのWebサービスをインターネットに公開したいと思いますが、機密情報を読み書きするため、特定のユーザーだけが呼び出すことができるようにするためには、ある種の認証メカニズムが必要です。サードパーティのWebサービスへの認証の追加

アイデアは、全く同じインターフェイス(同じパラメータで同じ操作)を公開しますが、セキュリティをチェックして認証が有効な場合は元のWebサービスを呼び出し、そうでない場合は例外またはエラーメッセージを返すように各呼び出しを傍受します。私はMule ESBを使用しようとしていましたが、私はそこに手が届きません。 これはミュールで可能ですか?そうでない場合は、どうすればこのことをやりますか?誰かが私を正しい方向に向けることができますか? ありがとうございます。ここで

+0

どのような種類のセキュリティチェックを想定していますか? HTTPレベル(Basic Authなど)またはWSレベル(WS-Securityなど)で –

+0

WS-Securityは、SOAP WSにセキュリティを提供しているので、理想的です。しかし、私はそれを実装することも難しいと思います。一方、基本認証は基本的なものでも基本的なものです。私はクライアントとサーバーの両方に自己署名証明書を使ってSSLとの相互認証を考えていました。問題は、今私がこのすべてをミュールにまとめる方法を得られないということだけです。どんな提案も大歓迎です。ありがとう。 – jlordiales

答えて

0

は、セキュリティ保護されていないターゲットWebサービスにWS-Securityを追加したWebサービスプロキシの例です:

<?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> 

+0

その例をありがとう。私はそれを理解しようとするためにそれを周遊します。乾杯! – jlordiales

+0

これで、投稿されたサンプルのマイナーチェンジが完璧に機能しています。私はSoapUIでそれをテストし、資格情報を渡したときに外部WSを呼び出すと、WS-Security例外が返されます。私は、最終的な質問があることを知っています。「http:// localhost:8080/sec-ws/stockquote?wsdl」というJavaクライアントを生成しようとすると、内部的にルックアップが外部WSDLにリダイレクトされます。しかし、私がこの外部WSDLに直接アクセスできない場合、インポートプロセスはWSのためのWSDLとXSDの場所を知らない。これを回避する方法はありますか? – jlordiales

+0

私はあなたの質問を受け取りません:リモートWSDLはアクセス可能かどうか? –

0

http://www.webservicex.net/stockquote.asmx?wsdlは、同じ結果を与えます。だからあなたはそこでそれをテストすることができます。多分問題は.netサービスにあります。

とにかく、今のところ私はwebserviceパターンで正常なプロキシを作った。今私はまだ応答を変えることに取り組んでいます。 MuleはレスポンスとしてReleasingInputStreamを引き続き提供しているので大成功はしません。

関連する問題