Redmine loves Clinker

One of the last milestones completed on Clinker is the development of the integration of this with Redmine, providing the ability to manage users in a centralized form from Clinker SSO. Thus Clinker has the delegated responsibility of the management of the authentication and authorization of Redmine users, ensuring the availability of this solution within our software ecosystem. To accomplish this, we have developed a plugin for Redmine, based on the recently released Redmine JOSSO Authentication Plugin.

The new plugin aims to: (i) manage authentication requests in Redmine using Clinker SSO for the management of the access to protected areas, (ii) manage the authenticated user data, synchronizing the user’s properties registered in Clinker SSO and allowing to create users in Redmine database automatically, and finally (iii) the authorization of these users by establishing a mapping between the user roles in Clinker SSO and its correspondence in Redmine.

This plugin also must be able to retrieve a session ID of Clinker SSO produced by another application of the ecosystem  when the user attempts to access in Redmine.

The development has been focused on to define a new agent for Redmine in Clinker SSO so that we can establish connections with the WS API defined for this, and the redesign of the controller that handles authentication requests from Redmine, namelly AccountController. The following diagram illustrates the design of the solution:

 

Redmine SSO

So, any request for access to Redmine redirects us to the Clinker SSO login form and if a successful authentication is established, the controller performs the management of the authenticated user permissions in Redmine.

Redmine loves Clinker

Uno de los ultimos hitos cumplidos dentro Clinker es el desarrollo de la integracion de este con Redmine, proporcionando la posibilidad de gestionar los usuarios de este último de forma centralizada mediante Clinker SSO. De esta forma se delega en Clinker SSO la responsabilidad de gestionar la autenticación y autorización de usuarios en Redmine garantizando la disponibilidad de este dentro de nuestro ecosistema software. Para llevar esto a cabo, se ha desarrollado un plugin para Redmine, parcialmente basado en el recientemente liberado Redmine JOSSO Authentication Plugin.

Este nuevo plugin tiene como objetivos: (i) gestionar las peticiones de autenticación en Redmine mediante Clinker SSO de tal forma que se gestione el acceso a zonas protegidas, (ii) gestionar los datos del usuario autenticado, sincronizando las propiedades del usuario registradas en Clinker SSO con Redmine, así como permitiendo crear de forma automatica usuarios en Redmine cuando no existan en la base de datos de este pero si en la de Clinker SSO, y por último, (iii) la autorizacion de estos usuarios estableciendo un mapeo entre los roles establecidos para los usuarios en Clinker SSO y su correspondencia en Redmine.

Este plugin, además, deberá ser capaz de recuperar un identificador de sesión de Clinker SSO generado en otra aplicación del ecosistema para autenticar y autorizar al usuario directamente en el momento que acceda a Redmine.

El desarrollo ha consistido en definir un nuevo agente de Clinker SSO para Redmine de tal forma que podamos establecer conexion con la WS API definida para este, y el rediseño del controlador de Redmine que gestiona las peticiones de autenticación de usuarios, AccountController. En el siguiente diagrama ilustra el diseño simplificado de la solución:

 

Redmine SSO Diagram

Toda petición de acceso a Redmine nos redirige al formulario de login de Clinker SSO y en caso de autenticación correcta, se lleva a cabo en el controlador la gestión de permisos del usuario autenticado y la autorización del mismo a los recursos en Redmine sobre los que puede tener acceso en base a un determinado rol y para los proyectos en los que este sea miembro.

Sonar integrado con Clinker SSO

Dentro de la milestone en la que estamos avanzando, se encontraba la integración de la herramienta Sonar y Clinker SSO. El objetivo de esta integración es poder gestionar los usuarios de Sonar de forma centralizada, es decir, poder gestionar sus datos de autenticación y autorización. Para ello se ha desarrollado un plugin de Sonar encargado de:

  • Redirigir al formulario de login (proporcionado por Clinker SSO) a un usuario no autenticado que accede a una zona protegida
  • Crear una sesión autenticada en Sonar cuando un usuario autenticado en Clinker SSO accede a una zona protegida
  • Sincronizar los datos de autorización entre Clinker SSO y Sonar
  • Crear usuarios en Sonar cuando no existen en su base de datos pero sí en Clinker SSO

El siguiente diagrama ilustra el diseño simplificado de la solución basada en JOSSO y el plugin de Sonar desarrollado para la integración:

Aunque en el diagrama no se ha incluido por motivos de claridad, en el proceso también actúa el agente de JOSSO (instalado a nivel general en el contenedor JSP/Servlet, Apache Tomcat en nuestro caso). Este agente se encarga de redirigir al usuario al formulario de login en el SSO cuando su petición no contiene un identificador de sesión válido.

En el desarrollo del plugin de Sonar se han usado varios puntos de extensión, para conseguir el efecto deseado:

  • Authentication Extension Point: se ha usado exclusivamente para capturar las peticiones de autenticación a través de la API WS y llamadas a authenticate en el RubyRailsWebservice que veremos después, ya que el formulario de login queda anulado, no es alcanzable por el usuario.
  • RubyRailsWebservice: este servicio web es el que recibe en flujo de ejecución tras la autenticación en el formulario de login del SSO. Realiza una llamada a authenticate para crear la sesión propia de Sonar.
  • DatabaseSession: el plugin necesita crear usuarios y modificar sus roles en la BD de Sonar, por tanto necesita acceder directamente a la BD. Se ha reutilizado el componente del core DatabaseSession mediante el IoC diseñado para los plugins.

Por último, sólo indicar que el plugin sería capaz de recoger un identificador de sesión en el SSO creado para acceder a cualquier otra aplicación (también integrada en el SSO), y autenticar al usuario directamente. Es decir, si disponemos de una sesión activa en la aplicación A en una pestaña del navegador, al abrir otra pestaña y acceder a Sonar nos encontraremos automáticamente autenticados.

Gestión de usuarios en Subversion

En esta entrada vamos a compartir los primeros resultados que se han obtenido en Clinker. Tal y como se refleja en su roadmap, una de las líneas de trabajo que pusimos en marcha fue incorporar un Single Sign On. Clinker es un claro ejemplo de integración de herramientas, y tratándose de ecosistema de desarrollo software, era muy probable que incluyésemos subversion. Esta herramienta puede instalarse de tres formas distintas según el acceso al repositorio que necesitemos:

  1. Local: Requiere que el cliente esté en la misma máquina donde se encuentran los repositorios. Útil para instalaciones locales o cuando tenemos el sistema que ficheros que contiene a los repositorios importado de alguna forma. Nunca lo hemos visto en entornos de producción. Se accede mediante file://
  2. SVN: Dispondremos de un servicio al que nos conectamos con un cliente de subversion. Proporciona su propio mecanismo de autenticación y autorización de usuarios. Se accede mediante svn://
  3. DAV: Es Apache Web Server el que proporciona el acceso a los repositorios. Sobre el protocolo HTTP se añade una nueva capa para dar soporte al protocolo DAV, y sobre éste, se personalizan las opciones de subversion. Son módulos de Apache Web Server los que se encargan de proporcionar autenticación y autorización. Se accede mediante http[s]://

El escenario con el que más nos hemos encontrado es precisamente este último. Sea cual sea el modo de acceso a los repositorios uno de los grandes inconvenientes al que los administradores de sistemas se enfrentan es gestionar volúmenes grandes de repositorios, usuarios y grupos. Resulta tedioso gestionar las cuentas de usuario (autenticación), grupos (autorización) y permisos (autorización). Os sonará este archivo:

[cc lang="php"]

[groups]
calc-developers = harry, sally, joe
paint-developers = frank, sally, jane
everyone = harry, sally, joe, frank, jane

#Groups can be granted access control just like users. Distinguish them with an “at” (@) prefix:

[calc:/projects/calc]
@calc-developers = rw

[paint:/projects/paint]
jane = r
@paint-developers = rw
[/cc]

Pues bien, vuestro sufrimiento no tiene por qué continuar. En @klicap hemos estado trabajando para que subversion quede completamente integrado en Clinker SSO. Para ello hemos contado con JOSSO (Java Open Single Sign On) sobre el que hemos desarrollado varios plugins que nos permiten extender las funcionalidades que ofrece y cubrir así las necesidades detectadas. Para la integración de subversion y Clinker SSO se han desarrollado dos módulos para Apache Web Server:

  1. Apache Authnz Clinker: Se encarga de la autenticación. Nos permite olvidarnos del conocido .htpasswd
  2. Apache Authz SVN Clinker: Se encarga de la autorización. Nos permite olvidarnos del archivo antes mencionado.

Ambos módulos consumen el servicio web que expone uno de los plugins que se han desarrollado para JOSSO. Clinker SSO está diseñado para trabajar con una base de datos como almacén de datos (persistencia) pero siempre tendremos la opción de usar otros almacenes de datos o incluso combinarlos. Es decir, podemos usar LDAP para las credenciales de los usuarios (autenticación) y MySQL para los grupos y permisos (autorización). Por ahora usamos únicamente una base de datos.

Y ahora tenemos que presentar Clinker Administrator. Una herramienta basada en tecnología web desde la que administramos el ecosistema. Será en esta misma herramienta desde la que se gestionen los usuarios que tanto Subversion como el resto de herramientas (alfresco, trac, hudson, sonar, etc.) compartirán.

Por lo tanto si tenéis Subversion como sistema de control de versiones ya tenéis una nueva alternativa para la gestión de usuarios. Lo más parecido a Clinker SSO + Subversion es AccesSVN de la empresa Polarion Software. Durante estos días estamos trabajando en preparar Clinker Virtual Appliance. Una máquina virtual basada en VMWare con Clinker con la que podréis probar el funcionamiento de Clinker SSO.