2011-08-02 32 views
5

Pasé muchos días y noches tratando de encontrar un marco Java adecuado que pudiera conectarse a Microsoft Dynamics CRM que utiliza la autenticación Negotiate/NTLM. Intenté todas las sugerencias existentes sobre Stackoverflow y otros recursos con JAX-WS, Axis2, CXF con varios manejadores de protocolo HTTP. Ninguno de ellos funcionó como se esperaba. El mejor enfoque actualmente es Axis2/commons-httpclient-3.1, donde puedo rastrear al menos las tres fases con el resumen NTLM, sin embargo, el IIS de destino todavía rechaza la autenticación con 401 no autorizado. Apache CXF - ambos con soporte incorporado NTLM Java6 y jCIFS, que algunas personas sugirieron como un remedio, tampoco funcionó ya que el primero falla en la segunda respuesta 401 (mientras que debería haber sido enviado la tercera solicitud, de acuerdo con el protocolo) y el último intenta leer el código de respuesta de una secuencia de entrada vacía y falla.Cliente Java para el servicio web SOAP con autenticación NTLM

Entonces, la pregunta es si alguien ha logrado dominar un servicio web SOAP protegido con NTLM desde la plataforma Java 6.

+0

Verifique: la compatibilidad con el perfil Kerberos debe estar en CXF (consulte ['KerberosTokenPolicyValidator'] (http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org) /apache/cxf/ws/security/wss4j/policyvalidators/KerberosTokenPolicyValidator.java?view=markup&pathrev=1149227)). De lo contrario, compruebe [wss4j-kerberos] (http://wss4j-kerberos.svn.sourceforge.net/viewvc/wss4j-kerberos/trunk/src/org/apache/ws/security/processor/KerberosTicketProcessor.java?revision=HEAD&view= marcado) proyecto. –

+0

Hola! ¿Lo has resuelto? –

+0

Sí. Ver http://stackoverflow.com/a/7274388/802831 –

Respuesta

1

Esperaba que alguien más interviniera, ya que mi conocimiento de esta área tiene varios años y quizás no sea el mejor consejo, en particular, solo he trabajado con recursos comunes, httpclient 3 y ninguno de los paquetes más recientes. esa promesa de hacer NTLM/NTLMv2 correctamente.

Como probablemente hayas notado, el código de autenticación NTLM de commons-httpclient 3 solo admite NTLM, no el protocolo NTLMv2 más nuevo. Mi solución a este problema fue usar commons-httpclient 3 y reemplazar el código de autenticación NTLM con una solución compatible con NTLMv2. Afortunadamente, la especificación NTLMv2 es published by Microsoft. Honestamente, no es terriblemente difícil de implementar, pero, por supuesto, ahora es algo que tienes que mantener y que puede no ser deseable por una serie de razones.

+0

por favor revise mi auto-respuesta anterior –

0

Olvidé decir que encontré una solución yo mismo. La clave es reemplazar la pila de protocolos estándar de Java con Jespa + jCIFS y crear un parche menor para trabajar con JAX-WS.

+3

¿Puede profundizar sobre dicha solución? – javamonkey79

Cuestiones relacionadas