0

新しい要件がありますが、それを開発する方法がわかりません。それが可能かどうかはわかりません。問題は、アプリケーションにWebサーバーがあるのに、クライアントが2つの異なるセキュリティポリシーで呼び出したい場合、UsernameTokenで呼び出す場合があることです。場合によってはBinarySecurityTokenを使用します。

クライアントが送信するヘッダーは次のとおりです。

UsernameTokenの場合

<soapenv:Header>
  <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
     <wsse:UsernameToken wsu:Id="UsernameToken-3" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <wsse:Username>USER</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">PASS</wsse:Password>
        <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">Qm2Ytc9hW/xsQSo4KAurSQ==</wsse:Nonce>
        <wsu:Created>2012-03-27T07:27:02.605Z</wsu:Created>
     </wsse:UsernameToken>
  </wsse:Security>

そしてBinarySecurityTokenの場合

   <soapenv:Header>
  <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
     <wsse:BinarySecurityToken EncodingType="wsse:Base64Binary" ValueType="esquema" wsu:Id="SSOToken" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">MEEwNjJFNTU3QzN....G13eWo5RT0=</wsse:BinarySecurityToken>
  </wsse:Security>

したがって、UsernameTokenの場合、services.xmlでこのコードを使用します。これは正常に機能します。PWCBHandlerでユーザー名とパスワードを取得し、データベースに対して検証します。

<module ref="rampart" />
    <wsp:Policy wsu:Id="UsernameToken" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
        <wsp:ExactlyOne>
            <wsp:All>
                <sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
                    <wsp:Policy>
                        <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient" />
                    </wsp:Policy>
                </sp:SupportingTokens>
                <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
                    <ramp:passwordCallbackClass>com.aaa.bbb.ccc.impl.PWCBHandler</ramp:passwordCallbackClass>
                </ramp:RampartConfig>

            </wsp:All>
            <wsp:All/>
        </wsp:ExactlyOne>
    </wsp:Policy>

問題は、base64文字列を取得してそれを使ってやりたいことを行うために、BinarySecurityTokenのセキュリティを実装する方法がわからないことです。もう1つの疑問は、2つのセキュリティポリシーを組み合わせることができるかどうかわからないことです。同じサービスで、または別のサービスを公開する必要があります。

4

1 に答える 1

0

複数のセキュリティ ポリシーを同じサービスに適用する方法の理想は、ポリシーの代替手段を使用することです。しかし現在、これは Axis2/Rampart ではサポートされていません。

ただし、回避策として、異なるポリシーを同じサービスの異なるバインディングに関連付けることができます。このブログ投稿では、同じサービスに異なるポリシーを適用する方法について説明しています。

http://blog.rampartfaq.com/2009/08/how-to-add-secured-and-non-secured-end.html

バイナリ セキュリティ トークンに関するポリシーに関する質問について:

バイナリ セキュリティ トークンは、WS-Security で定義され、X.509、Kerberos、特定の形式でエンコードされた非 XML トークンなどのさまざまな種類のトークンを転送します。つまり、SOAP メッセージ内にさまざまな種類のトークンを埋め込むために定義された汎用要素です。

于 2012-04-20T11:51:20.260 に答える