Llevo varios días interesándome por la plataforma Viafirma, desarrollada por Viavansi, y es que considero que es la mejor alternativa a día de hoy para disponer de un entorno basado en m-government real. Yo hace ya tiempo que la conocía, y de hecho siempre la he recomendado como alternativa a otras plataformas de autenticación y firma digital. La última referencia que di de ellos fue en mi ponencia de administración electrónica de las II Jornadas de Conocimiento Libre y Web 2.0 de la Universidad de Cádiz.
El caso es que me pico la curiosidad y tras desarrollar el plugin de integración de JOSSO y Redmine, y ojear la documentación de la zona de desarrolladores de Viafirma que han puesto a disposición de todos para realizar integraciones, me propuse hacer una integración rápida entre Redmine y Viafirma para gestionar la autenticación de usuarios de Redmine haciendo uso de certificados digitales. Dado que es un experimento me propuse hacerlo rápido, poco menos de cinco minutos, haciendo uso de los clientes de integración que hay disponibles y de la distribución SaaS de Viafirma. En este caso opté por hacer uso del cliente de PHP de tal forma que pense lo siguiente:
- En primer lugar llevar a cabo el desarrollo de un pequeño plugin de Redmine donde solo tendria que rediseñar el controlador AccountController al igual que hice para el plugin de autenticación de Redmine mediante JOSSO de tal forma que capturase la petición de login de Redmine y me gestionase la redirección al servicio de Viafirma para llevar a cabo la autenticación.
- A continuación, tras llevar a cabo la configuración del cliente de PHP y levantarlo en un servidor Apache, reescribí el index.php, para que directamente me redireccionará a openidLogin.php, de tal forma que cuando se lleve a cabo la petición de autenticación, me aparezca lo siguiente:
- A continuación Viafirma se encarga de obtener los datos de mi certificado y este lleva a cabo la redirección a quien realizo la petición, en este caso el cliente, tal y como se puede ver en la captura mostrada. Tras esto, me limite simplemente a modificar levemente dentro de openidLogin.php la URL de retorno tras el proceso de autenticación, redireccionando la petición a end.php, un pequeño script en PHP que en caso de autenticación satisfactoria vuelve a redirigirme a Redmine invocando nuevamente al controlador de la petición login, con los datos de mi certificado, de tal forma que este controlador ya no invoca de nuevo al servicio de Viafirma sino que cruza los datos de mi certificado con sus usuarios. En caso de que exista algun usuario dado de alta en Redmine con el identificador numberUserId el controlador gestionará la autenticación de este mostrando además los datos de su certificado como podemos ver aquí.
Et voilá! sencillo y rápido. Como ya comente, quería solo experimentar. Evidentemente, lo elegante habría sido desarrollar un cliente en Ruby para Viafirma, pero no tengo tiempo ahora mismo para eso, así que de momento, esta es la solución rápida. Acabo de liberar el código de este ejemplo bajo licencia GNU GPL v2, así como las modificaciones del cliente de Viafirma en Github, y he indexado el plugin en el directorio de Redmine.
Compárteme en:
2 comentarios:
Impresionante Ildefonso!!!! Enhorabuena por una solución tan ingeniosa, aprovechar el cliente PHP para integrar con una solución RoR es muy hábil ;) Gracias por confiar en Viafirma :)
Seria posible una integración entre Viafirma y Redmine para el firmado digital de formularios creados a traves de Redmine. (o cualquier emisor de firma digital + redmine)
Publicar un comentario