UsernameToken и BinarySecurityToken в одних и тех же сервисах - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть новое требование, но я не знаю, как его разработать, или, если это возможно или нет, проблема в том, что у моего приложения есть веб-сервер, но клиент хочет вызвать его с двумя разными политиками безопасности, иногдаэто с 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>

Проблема в том, что я не знаю, как реализовать защиту для BinarySecurityToken, чтобы получить строку base64 и делать с ней все, что я хочу, и другое сомнение в том, что я не знаю,Я могу объединить две политики безопасности в одной и той же службе или предоставить другую.

1 Ответ

0 голосов
/ 20 апреля 2012

Идеальным способом применения нескольких политик безопасности к одному и тому же сервису является использование альтернативных политик.Но в настоящее время это не поддерживается в Axis2 / Rampart.

Но в качестве обходного пути для разных привязок одного и того же сервиса могут использоваться разные политики.В этом сообщении блога объясняется, как применять различные политики к одному и тому же сервису.

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

По вопросу о политике для двоичных токенов безопасности:

Двоичные токены безопасностиопределены в WS-Security для передачи различных типов токенов, таких как X.509, Kerberos, не-XML-токены, закодированные в определенном формате.Таким образом, это общий элемент, определенный для встраивания различных типов токенов в сообщение SOAP.

...