Cómo integrar Redmine con CAS (y Openldap)

En el INAP usamos Redmine para la gestión de incidencias y como herramienta ágil de gestión de proyectos. La base para la autenticación es Openldap. Se trata de una funcionalidad estándar de Redmine, basta con especificar la dirección del Openldap, el mapeo de atributos y las credenciales de acceso (sólo necesario si el servidor Openldap no soporta querys anónimas).Es importante marcar el checkbox "On-the-fly user creation" para que si un usuario no existe en Redmine se cree automáticamente.

redmine-ldap-alvaroreig

Sin embargo, queríamos integrarlo con el Single Sign On coporativo. Jasig CAS es un SSO que permite conectar proveedores de credenciales con aplicaciones que delegan su autenticación. De este modo, las aplicaciones se abstraen de los detalles de la autenticación. Basta con agregar una segunda fuente de credenciales a CAS para que todas las aplicaciones casificadas puedan utilizarla.

jasig-cas-architecture-alvaroreig

Además de saltar de una aplicación a otra sin tener que autenticarse de nuevo, obtuvimos funcionalidades adicionales como el empleo de otras credenciales además de Openldap. De hecho, al tener configurado certificado digital en CAS los usuarios lo utilizan para acceder a Redmine. Además, al conocer nuestros usuarios la pantalla de autenticación del SSO queda claro que las credenciales son las mismas que en las demás aplicaciones.

Tras probar varios plugins, optamos por "Redmine_cas" y "Redmine_ldap_sync". El primero posibilita autenticarse con CAS, pero no permitía la creación de usuarios al vuelo. Por ello, antes de que un usuario pudiera autenticarse en Redmine desde CAS era necesario crearle una cuenta manualmente. Redmine_ldap_sync suple esa carencia, ya que extiende la funcionalidad estándar de Redmine permitiendo la sincronización asíncrona de usuarios desde Openldap e incluso automatizar la pertenencia a grupos.

Configurando Redmine_ldap_sync

Para instalar Redmine_ldap_sync basta con seguir los pasos genéricos para instalar un plugin en Redmine.

cd /usr/share/redmine/plugins
git clone https://github.com/thorin/redmine_ldap_sync.git
rake redmine:plugins:migrate RAILS_ENV=production

Tras reiniciar Redmine veremos una nueva opción en el panel de administración llamada Ldap synchronization. Veremos una entrada por cada openldap que se tenga configurado en Redmine. La configuración que yo he utilizado es la siguiente:

redmine-ldap-sync-1-alvaroreig

El campo sombreado indica la ubicación de los grupos en Openldap. Si los tenemos, es posible mapear automáticamente grupos en openldap con grupos de Redmine.

redmine-ldap-sync-2-alvaroreig

El campo subrayado en rojo permite especificar un grupo al que todos los usuarios que entren por este Openldap serán añadidos. Esta opción es especialmente útil para restringir los permisos en Redmine; se pueden configurar varias ramas de Openldap (en Redmine se configuran como Openldaps separados, apuntando al common name de cada rama) para que usuarios internos o externos pertenezcan a distintos grupos y jugando adecuadamente con los permisos queden aislados entre ellos.

Por último, la tabla inferior especifica el mapeo de atributos entre Openldap y Redmine.

Una vez configurada la sincronización sólo falta asegurar que todos los usuarios de Openldap están creados en Redmine. Para ello Redmine-ldap-sync proporciona varias tareas Rake que podemos automatizar a través de un cronjob. La siguiente tarea importa todos los usuarios hacia el Openldap. Si un usuario es borrado en Openldap se deshabilita en Redmine. Es muy práctico que no se borre, ya que de otro modo la historia pasada de este usuario quedaría desvinculada.

rake redmine:plugins:ldap_sync:sync_users RAILS_ENV=production

Configurando redmine_cas

Tras asegurar que todos los usuarios del Openldap del que se alimenta Redmine están en Redmine sólo falta instalar el plugin Redmine-cas:

cd /usr/share/redmine/plugins
https://github.com/ninech/redmine_cas.git
rake redmine:plugins:migrate RAILS_ENV=production

Después de reiniciar veremos una nueva opción en la pantalla de administración. Salvo que tengamos atributos personalizados, sólo es necesario especificar la URL del servidor de CAS. A partir de ese momento al apuntar a la raíz de Redmine se redireccionará al usuario a CAS. No obstante, si en algún momento la autenticación con CAS falla existe la opción de autenticarse directamente contra Openldap apuntando directamente a miurlderedmine.org/login.

Recursos

Publicado en tutoriales Etiquetado con: , ,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*