java - example - jaxws client cxf
Autenticación HTTP "Negociar" a través de NTLM desde un cliente Java SE6 en Windows (1)
¿Alguien sabe si un cliente Java 6 que se ejecuta en Windows puede autenticarse a través de NTLM al acceder a un servidor de Microsoft que implementa el protocolo de autenticación SPNEGO?
Tengo entendido que Java 6 que se ejecuta en Windows tiene soporte integrado para SPNEGO, pero parece que la implementación de Java no intenta la autenticación NTLM en el caso de que la autenticación kerberos no sea posible. El ejemplo de Authenticator provisto en los documentos de Sun falla con un error 401 no autorizado en respuesta al servidor que envía WWW-Authenticate: Negociar .
Aquí hay una descripción del entorno de prueba:
Servidor de destino:
- Servidor independiente de Windows 2008 R2 (no parte del dominio AD)
- Servicio Microsoft SOAP implementado usando WCF
- WCF está configurado para autenticación SPNEGO (kerberos y NTLM)
- El servidor WCF no se puede reconfigurar para admitir otros modos de autenticación :(
Cliente máquina:
- Estación de trabajo independiente Windows 7 de 64 bits (que no forma parte de un dominio)
- Cliente Java SE6 ejecutando el ejemplo de Sun SPNEGO
El objetivo final es utilizar Apache CXF 2.4.0 para invocar servicios SOAP en el servidor WCF. Antes de agregar las complejidades de CXF y SOAP, he tratado de recuperar el WSDL del servidor utilizando una sencilla aplicación de prueba de Java para resolver los problemas de autenticación.
FWIW: puedo acceder al servidor WCF desde IE utilizando el inicio de sesión local del administrador para el servidor Windows. También pude crear un cliente SOAP Delphi XE sin ninguna configuración de autorización especial. El cliente Delphi SOAP usa WinInet bajo el capó.
SPNEGO de Java solo es capaz de Kerberos porque NTLM es una tecnología de MS heredada patentada. Si su máquina de destino no es parte de un dominio, como es en su caso, no tiene suerte. Deberías cambiar a autenticación DIGEST-MD5 si puedes.