Actualmente estoy intentando escribir un servicio web para el cliente y el requisito es usar WS Security. En el lado del servidor, tienen contraseñas almacenadas como SHA-1 (salt + contraseña).
Según la especificación de WSS, el encabezado de seguridad contendrá el resumen de nonce, timestamp y password como SHA-1 (nonce + timestamp + password_user_entered). Luego, en el servidor usted hace SHA-1 (nonce_from_header + timestamp_from_header + password_from_database) y lo compara con el resumen de la contraseña del encabezado. Este tipo de implica que las contraseñas en el back-end deben estar en texto claro. Supongo que funcionaría si las contraseñas en el back-end son solo SHA-1 (contraseña) porque puede indicar a los clientes que construyan un resumen como SHA-1 (nonce + timestamp + SHA-1 (contraseña)) pero no puedo hacer Funciona con contraseñas saladas.
En mi caso, ya que las contraseñas en el back-end son hash y salted, no podré autenticar al usuario ya que en el servidor solo podré hacer SHA-1 (nonce_from_request + timestamp_from_request + hashed_salted_password_from_database) que no coincidirá con el resumen de la solicitud. Por lo tanto, parece que, de alguna manera, Salt debe encontrar su camino al cliente para que puedan crear un resumen de contraseña que se pueda usar en el servidor.
Parece que una solución es tener un servicio web al que llames primero y que envíes un nombre de usuario y que obtengas sal para ese usuario. Luego crea el resumen de la contraseña como SHA-1 (nonce + timestamp + SHA-1 (salt_from_server + password)) y lo usa en el encabezado de svc web principal. ¿Es esta una buena solución o hay una mejor manera estándar de la industria para lidiar con escenarios similares?
Gracias.