2010-12-07 23 views
5

Necesito escribir un cliente de servicio web para llamar a un servicio web de terceros (basado en SOAP). El tercero publicó un wsdl y los archivos xsd asociados.Llamar a un servicio web seguro en Java

El tercero asegurar su sitio web y el uso de los servicios p.12 certificados

he usado para generar wsdl2java mis talones. Modifiqué los puntos finales y llamé al servicio. Recibí el siguiente error:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header></SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
     <SOAP-ENV:Fault> 
     <faultcode xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">wsse:InvalidSecurity</faultcode> 
     <faultstring>SECU1075: An error was discovered processing the &lt;wsse:Security> header</faultstring> 
     <detail>SECU3510: Signature requirements validation failed: Element (/soapenv:Envelope/soapenv:Body) was not signed</detail> 
     </SOAP-ENV:Fault> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Hmmm, ok. Tiene sentido que debería firmar el documento.

La parte extraña (para mí) es que no hay una definición de seguridad en ningún lugar del archivo WSDL. ¿Esto es normal? Me puse en contacto con el tercero y me enviaron un pdf de cómo debe ser el mensaje SOAP. Las siguientes etiquetas aparecen en el encabezamiento: que contiene:

<wsse:BinarySecurityToken> 

y

<dsig:SignedInfo> 

por lo que desde lo que se reúnen, se requiere mi certificado y algunas firmas digitales.

¿Alguien puede recomendar cómo generar estos en Java? Comencé por el camino de Axis2/Rampart pero, sinceramente, parece que se basan en que los requisitos de seguridad estén definidos en el archivo WSDL (corríjanme si me equivoco).

Respuesta

4

Parece que debe firmar su mensaje utilizando el estándar WS-Security. El estándar de seguridad WS no especifica ninguna asignación de seguridad al archivo wsdl. Algunas aplicaciones usan la política WS-Security y Attachment WS-Policy junto con la seguridad Ws. WS-Policy Attachment especifica la forma de asignar políticas a WSDL.

Usted puede aprender más acerca de estos norma de W3.org

Y sí usted está en el camino correcto, podría utilizar WSS4J o eje del terraplén que su elección.

+0

En realidad, hice algunos progresos con Rampart después de leer su comentario. Creo que necesitaba que alguien realmente me dijera que la definición de seguridad no era necesaria en el servicio para poder avanzar. Por extraño que parezca. –

Cuestiones relacionadas