2011-08-12 12 views
1

Websphere 7とJAX-WSを使用してWS-Securityを使用するWebサービスを開発しようとしています。いくつかのガイドを見ると、アプリケーションサーバーのユーザーレジストリを作成し、そのサーバーのユーザー名/パスワードを維持する必要があります。とにかくサーバー自体にユーザー名を作成せずに、ヘッダーをキャプチャして、シングルサインオンのようなカスタムセキュリティ構成に基づいて検証を行う必要はありませんか?WS-Security Websphere Configuration

ヘッダーを取得するためのハンドラーを作成できますが、mustUnderstandsが要求(必須)で1に設定されていると、ハンドラーがメッセージを見る前に拒否されます。

私は、WS-SecurityのUsernameToken部分のみを使用したいと考えています。

何か助けていただければ幸いです。

私の要求

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header> 
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1"> 
     <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" Id="unt_20"> 
     <wsse:Username>some_username</wsse:Username> 
     <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">some_password</wsse:Password> 
     </wsse:UsernameToken> 
    </wsse:Security> 
    </soapenv:Header> 
    <soapenv:Body> 
    ...body... 
    </soapenv:Body> 
</soapenv:Envelope> 

の例としては、それは私が私の既存のユーザーの検証スキームを使用できるようにカスタムセキュリティの実装を作成することは可能ですか?

答えて

0

達成したいことについて詳しく説明できますか?

WASサーバーは、ユーザー・レジストリー(LDAP、ファイルベースのレジストリーなど)に対してヘッダーに入っているユーザー名とパスワードを検証する必要があります。

LTPAトークン(WebSphereおよび関連製品でSSO用に使用される)も使用できます。

あなたの要件を記入すると、ここの人々があなたを助けることができます。

HTH

Manglu

+0

主な問題は、ユーザー名とパスワードを別の場所に格納したくないということです。役割を取得して検証するためにユーザー名とパスワードを送信できる既存のサービスがあります。これは中央のリポジトリであり、WASの中に入れる代わりにそのリポジトリを使用したいと思います。 – Nick

0

JAX-WSは、カスタムインターセプタを持ってできるようにする必要があります。

サービスエンドポイントにインターセプタを追加した方法を確認するには、このスプリング設定を見てください。

<jaxws:endpoint id="pqdws" 
       implementor="#Atypon" 
       address="/pqdws" 
       publishedEndpointUrl="@[email protected]"> 
    <jaxws:properties> 
     <entry key="exceptionMessageCauseEnabled" value="true"/> 
     <entry key="Content-length" 
    </jaxws:properties> 
    <jaxws:inInterceptors> 
     <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"> 
      <constructor-arg> 
       <map> 
        <entry key="action" value="UsernameToken"/> 
        <entry key="passwordType" value="PasswordText"/> 
        <entry key="passwordCallbackRef"> 
         <ref bean="passwordCallback"/> 
        </entry> 
       </map> 
      </constructor-arg> 
     </bean> 
    </jaxws:inInterceptors> 
    </jaxws:endpoint> 

    <bean id="passwordCallback" 
     class="access.ws.ServerPasswordCallback"> 
    <property name="username" value="@[email protected]"/> 
    <property name="password" value="@[email protected]"/> 
</bean> 

インターセプタは、外部サービスを呼び出して認証するなど、任意の操作を実行できます。

+0

それは面白いです。私はインターセプターを置いたが、WASがそれを検証しようとするまで応答を捕まえていない。 – Nick

0

あなたはこれを達成するための政策/バインディングでアウトオブボックスWS-Securityのランタイムを使用することができますが、デフォルトを上書きするカスタムコードを記述する必要がありますUsernameTokensのユーザーレジストリーをチェックする動作。

のUsernameTokenを消費する際に、独自の認証メカニズムを使用するため、この記事を参照してください:あなたはまた、そのトークン内のユーザー名に基づいてのWebSphere資格情報を作成したい場合は

http://www-01.ibm.com/support/knowledgecenter/SSEQTP_8.5.5/com.ibm.websphere.base.doc/ae/twbs_replace_authmethod_usernametoken.html

はこの記事を参照してください。

http://www-01.ibm.com/support/knowledgecenter/SSEQTP_8.5.5/com.ibm.websphere.base.doc/ae/twbs_config_wssec_caller_no_reg.html

+0

リンクがあるためこの投稿を削除する必要があると考えている方は、リンク内のコンテンツから投稿を作成することはできません。エンジンは、コードが正しくフォーマットされていないので、投稿することはできません(コードがコンパイルされ、それをマークして、少なくとも10xを結果なしで実行しました)。誰かがこれらのリンクから極端に長い投稿を作ることができると思ったら、してください。 –