Hola amiguillos, les escribo para contarles algo que estuvimos haciendo en la ley que tal vez le pueda a interesar a alguno, especialmente porque la documentacion que hay dando vueltas es bastante pedorra.
Con Canoa estuvimos desarrollando un motor de workflow que alimentara (actualmente es una sola – una aplicacion oportunista que desarrolla khatcha en flexy) a muchas aplicaciones que consumen servicios de workflow.
Algo que habia quedado poco claro de movida es que esquema de seguridad usar, de hecho, mandamos mails preguntando a ver que onda, y por eso les cuento ahora en que quedo eso. La principal traba que estabamos teniendo es que no hay un manejo centralizado de usuarios, sino que cada aplicacion de thomson maneja localmente los suyos.
Por otra parte, pensamos en que no estaba copante que el workflow manejara autenticacion de usuarios. Actualmente las aplicaciones consumidoras le dan (por scripts de db, etc) sus usuarios al engine de workflow, y cada vez que la aplicacion consume servicios debe pasar ese usuario:password de forma tal que autentique la invocacion.
Nos parecio trucho porque:
1) Si confio en mi cliente hay una autenticacion que esta al pedo. El cliente me tira sus user:pass en algun momento y despues vuelvo a validar contra ese mismo user:pass (que, ademas, hay que mantener sincronizado porque la informacion esta duplicada)
2) Como mecanismo de seguridad, de todas formas, es bastante pobre, porque la informacion de autenticacion viaja en texto plano.
Entonces, la posibilidad de garantizar que quien esta del otro lado es alguno de nuestros clientes usando algo mas sofisticado era lo que necesitabamos, de esa forma podemos prescindir de autenticar usuarios. Surgio lo de la firma digital de los webservices, que nos sirve para garantizar que:
1) Quien esta del otro lado realmente es quien dice ser. Por ejemplo: Si SAE (el CMS de la ley, que va a ser nuestro principal cliente) me invoca un webservice y lo firma, puedo operar ciegamente (dentro de la informacion de workflow que corresponde a SAE) porque es una aplicacion en la cual confio.
2) Como bonus, puedo concluir en que el mensaje que recibi no fue alterado por nadie en el camino.
Sobre como funciona la criptografia asimetrica, la firma digital, y el porque de lo anterior, hay un resumen muy bueno:http://en.wikipedia.org/wiki/Public-key_cryptography
Sobre el estandar de seguridad en webservices: http://en.wikipedia.org/wiki/WS-Security
Bueno, el motivo del mail es entonces contarles como hacer con XFire para implementar la firma de webservices. Segun me parece, con CXF deberia cambiar de nada a poquitisimo.
Para empezar, necesitamos generar pares de claves. El cliente va a necesitar conocer solo su par de claves (publica y privada) mientras que el servidor de ws necesita conocer la clave publica de todos sus clientes interesados en consumir webservices.
Para eso, usamos una herramienta que se llama keytool que viene con la jsdk (keytool.exe)
(del lado del cliente)
% keytool -genkey -alias workflowClientAlias -keypass 123456 -keystore client_store.jks -storepass saraza -dname “cn=clienteSAE” -keyalg RSA
Leer más »