Actualmente estoy luchando un poco con la capa de seguridad de un servicio web que estoy escribiendo usando WSS4J y CXF.
Obviamente, no deseamos almacenar contraseñas de texto simple en nuestro backend, pero preferiríamos persistir solo los hashes con sal.
Sin embargo, las especificaciones del servicio están predeterminadas por nuestro cliente (quien utilizará el servicio para enviar un montón de datos a nuestra manera), hasta el uso de UsernameTokens con contraseña de texto simple (todas las comunicaciones están cifradas con SSL)
Ahora, el problema al que me enfrento es que parece que no puedo encontrar una manera de eliminar la contraseña de texto sin formato del encabezado de seguridad de la solicitud en nuestro extremo, compararla con nuestros registros junto con el nombre de usuario y autorizar o rechazar la solicitud.
Cada guía, tutorial o proyecto de ejemplo que he encontrado hasta ahora se basa en un CallbackHandler configurado como interceptor de entrada, que requiere la recuperación de la contraseña de texto sin formato correcta, que luego se compara directamente con las credenciales proporcionadas. No es una opción si solo almacenamos el hash. Me encontré con un par de fuentes que intentaban resolver problemas similares simplemente recomendadas para forzar al cliente a hacer el hash. Pero como dije antes, esto no es posible en nuestro caso. Las especificaciones del servicio son claras al respecto y está fuera de nuestras manos.
Este hilo que suena particularmente interesante, lamentablemente, tampoco me ayudó: Cómo ¿Implementar WSS UsernameToken cuando la contraseña en el servidor está incluida y hash?
Seguramente debe haber otra forma que no sea WSS4JInInterceptor / CallbackHandler, una que me permita digerir la contraseña de texto sin formato recibida y compararla con el hash salado en nuestra base de datos.
Cualquier puntero sería realmente apreciado. Gracias.