secure jax example ejemplo consumir con java soap jax-ws ws-security

java - jax - Usuario autenticado en SOAP-¿Cómo?



ws-security ejemplo (1)

JAAS no define cómo debería ser la información de autenticación en SOAP, pero WS-Security define qué tipo de tokens estandarizados puede usar durante el intercambio cliente-servidor (nombre de usuario + token de contraseña / certificado X.509 / token SAML / token Kerberos ).

EDITAR: Con respecto a la pila Metro WebService, necesita (pasos tomados aquí y aquí ):

  • Inyecte el controlador, que implementa javax.xml.ws.handler.soap.SOAPHandler a la cadena de controladores JAX-WS, ya sea programáticamente a través de ((BindingProvider)port).getBinding().setHandlerChain(Collections.singletonList(handler)) o de forma declarativa agregando @HandlerChain(file = "handlers.xml") anotación a su interfaz de punto final WS.
  • El controlador debe crear la instancia XWSSProcessor utilizando XWSSProcessorFactory , que se pasa el controlador de devolución de llamada que implementa javax.security.auth.callback.CallbackHandler .
  • El controlador de devolución de llamada, por ejemplo, define un validador en la devolución de llamada (depende del tipo de devolución de llamada).

Esto es lo mismo que "hacer a mano" (ya que el primer paso es interceptar el mensaje SOAP de todos modos), con algo de azúcar WSS en la parte superior. Pero WSIT (y CXF) usan JAAS API y proporcionan implementaciones estándar para varios tokens de autenticación. Permitirles necesita algunos esfuerzos de configuración / codificación, pero la ventaja es que si luego decides cambiar de plainttext a la autenticación Kerberos, no necesitas codificar mucho. Además, "hacerlo a mano" significa que debe tratar la información de autenticación a nivel XML y lo que hará es implementar uno de los estándares.

Sugiero usar Apache CXF que se base en WSS4J : la implementación de WS-Security de Apache. Puede encontrar fácilmente tutoriales (por ejemplo, aquí y aquí para nombre de usuario + contraseña, aquí y aquí para SAML) que se muestran para definir la devolución de llamada / interceptores para verificar la información de autenticación. La ventaja de CXF es que tiene una buena integración con Spring.

Hice una pregunta sobre JAX-WS, Autenticación y Autorización - ¿Cómo? ; hubo una discusión sobre los niveles de seguridad y dónde almacenar las credenciales de los usuarios.

Ahora, después de algunas conclusiones, quiero probar uno de esos escenarios:

  • Servicios web SOAP - metro
  • Nivel de mensajes de seguridad: autenticación de certificados mutuos para autenticar la aplicación cliente
  • Credencial de usuario en el encabezado de Soap

¿Cómo obtener las credenciales y hacer la autorización? Tengo 2 ideas:

  • JAAS (no sé nada de esto);
  • Controlador SOAP: utiliza WebServiceContext para extraer las credenciales del mensaje y realizar la autorización "a mano".

¿Puede ayudarme a decidir de la mejor manera y cómo implementarlo?

Recuerde que quiero un certificado mutuo, más un token de usuario.