외부 파트너의 서비스를 사용하는 JAX-WS-Client를 구현해야합니다. 나는 Apache CXF를 사용한다. 이 서비스는 wsdl - KerberosToken 및 UsernameToken에서 인증을위한 두 개의 WS-Policy를 정의합니다. 서비스는 외부 파트너로부터 제공되므로 변경할 수 없습니다.JAX-WS 클라이언트 CXF WS- 정책 문제
문제 : 간단한 UsernameToken 인증을 사용하고 싶기 때문에 Kerberos 인증에서 인증이 실패합니다.
WSLD-정책 부 : CXF-엔드 포인트에서
<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>
설정 아이디/비밀번호 :
public void addAuthenticationProperties(Endpoint endpoint) {
endpoint.put(SecurityConstants.USERNAME, userName);
endpoint.put(SecurityConstants.PASSWORD, password);
}
나는 태그 지정은 그 어떤 (excatly 한) 경우이의 의미 알고있는 것처럼 정책이 완전히 채워집니다. 그러나 CXF는 UsernameToken - Policy를 fullfill하려고 시도조차하지 않습니다.
KerberosToken 인증을위한 -Block을 제거해도 정상적으로 작동하지만 프로덕션에서는 불가능합니다.
힌트가 있습니까? wsdl 또는 내 접근 방식에 오류가 있으면 알려주십시오. 그리고 상세히 설명하십시오 - 나는이 분야에서 멍청하다.
미리 감사드립니다.
Thanks Colm O hEigeartigh! 클라이언트에게이 정책을 무시하고 UsernameToken-Request를 보내도록 지시하는 방법이 있습니까? 서버 측이 외부 파트너에 의해 정의되었으므로 정책을 강화할 수 없습니다. –
도움이 될 것입니다 : http://cxf.apache.org/ws-policy-framework.html. 기본적으로 첫 번째 정책 대안이 선택되지만이를 구성하는 방법이있을 수 있습니다. –
Thx Colm O hEigeartigh! 나는 그것을 들여다 볼 것이다. 이 외에도 해결 방법을 발견했습니다. 어쩌면이 해결 방법에 찬반 양론을 줄 수 있습니다. –