新しい要件がありますが、それを開発する方法がわかりません。それが可能かどうかはわかりません。問題は、アプリケーションに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つのセキュリティポリシーを組み合わせることができるかどうかわからないことです。同じサービスで、または別のサービスを公開する必要があります。