Я должен реализовать JAX-WS-Client, который использует сервис от внешнего партнера. Я использую Apache CXF. Служба определяет два WS-Policies для аутентификации в wsdl - KerberosToken и UsernameToken. Поскольку услуга предоставляется внешним партнером, она не может быть изменена.JAX-WS Client CXF WS-Policy Issue
Проблема: аутентификация завершается с ошибкой в Kerberos-Authentication, так как я хочу использовать простую аутентификацию UsernameToken.
WSLD-политики Часть:
<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
wsu:Id="SecurityServiceUsernameUnsecureTransportPolicy">
<wsp:ExactlyOne>
<wsp:All>
<sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<wsp:Policy>
<sp:KerberosToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssGssKerberosV5ApReqToken11/>
</wsp:Policy>
</sp:KerberosToken>
</wsp:Policy>
</sp:SupportingTokens>
</wsp:All>
<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:WssUsernameToken10/>
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
Установка Имя пользователя/Пароль на CXF-конечной точки:
public void addAuthenticationProperties(Endpoint endpoint) {
endpoint.put(SecurityConstants.USERNAME, userName);
endpoint.put(SecurityConstants.PASSWORD, password);
}
Как я понимаю -tag означает, что если какой-либо (одно все тоже) этого политика полностью заполнена. Но CXF даже не пытается заполнить UserToken - Policy.
Если я удаляю -Block для проверки подлинности KerberosToken, это нормально, но в производстве это невозможно.
Любые подсказки? Если в wsdl или в моем подходе есть ошибка, сообщите мне. И, пожалуйста, уточните, что я в этой области.
Заранее благодарен!
Спасибо Colm O hEigeartaigh! Есть ли способ сказать клиенту игнорировать эти политики и просто отправить UsernameToken-Request? Я не могу затягивать политики, потому что серверная сторона определяется внешним партнером. –
Это может помочь вам: http://cxf.apache.org/ws-policy-framework.html. По умолчанию выбирается первая альтернатива политики, но может быть способ ее настройки. –
Thx Colm O hEigeartaigh! Я посмотрю. Помимо этого, я нашел обходное решение. Возможно, вы можете дать некоторые плюсы или минусы этому обходному пути. –