CAS REST: Cómo logarnos en CAS sin ir a la pantalla de login por defecto

CAS REST: Cómo logarnos en CAS sin ir a la pantalla de login por defecto

0. Índice de contenidos.

1. Entorno

Este tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil Mac Book Pro 17″ (2,6 Ghz Intel Core i7, 8 GB DDR3)
  • Sistema Operativo: Mac OS X Snow Leopard 10.6.4
  • Maven 2.2.1
  • Eclipse 3.6 (Helios) con M2Eclipse
  • CAS Server 3.4.2.1

2. Introducción

En ocasiones nuestros clientes nos piden que implementemos un SSO para integrar sus aplicaciones en un único punto de entrada. Para este caso siempre tenemos la misma respuesta, hacerlo con CAS, pero la mayor parte de ellos ven “rara” la redirección que hay que hacer para logarte en la página de login que CAS trae por defecto.

Lo primero que le proponemos es customizar la apariencia de esta página principal para integrarla con el aspecto de su portal como ya vimos en este tutorial: CAS: Personalización de la interfaz

Pero en ocasiones esto no es suficiente para el cliente porque quiere utilizar una página de login propia, por ejemplo, un formulario que se muestra en la cabecera de todas las páginas del portal, y que por tanto no cabe redirección a ninguna otra página.

Pues bien en este tutorial vamos a darle solución a esta problemática utilizando el API de REST que nos ofrece CAS y que presentamos junto con un ejemplo, a continuación.

Antes de continuar con este tutorial se recomienda haber leído al menos el tutorial Introducción a CAS y para seguir el ejemplo práctico antes tendrán que completar este otro tutorial: Implementando SSO con CAS: ejemplo práctico

3. Vamos al lío

Lo primero va a ser crear un proyecto web con Maven o aprovechar uno que ya tengáis creado. Vamos a añadirle las siguientes dependencias:

A fin de poder acceder al servicio de RESTlet de CAS necesitamos habilitarlo, para ello vamos a editar el fichero CAS_WEBAPP_HOME/WEB-INF/web.xml para añadir el servlet que nos proporciona el servicio:

Además de este servlet tenemos que añadir a nuestro servidor de CAS (CAS_WEBAPP_HOME/WEB-INF/lib) las siguientes dependencias:

  • cas-server-integration-restlet-3.4.2.1.jar
  • com.noelios.restlet-1.1.1.jar
  • com.noelios.restlet.ext.servlet-1.1.1.jar
  • com.noelios.restlet.ext.spring-1.1.1.jar
  • org.restlet.ext.spring-1.1.1.jar
  • org.restlet-1.1.1.jar
  • cglib-2.2.jar

La mayoría de estas librerías se pueden encontrar en la distribución de CAS.

Ahora la idea es crear nuestro propio formulario de login para introducir las credenciales del usuario, comprobar la veracidad de esas credenciales con el validador de CAS y crear la cookie necesaria para que el resto de aplicaciones del portal se den cuenta a través de Spring Security que ya existe la cookie de CAS y que por tanto ese usuario ya está validado en todas las aplicaciones en las que tenga permiso

Vamos a crear un formulario de login muy sencillo con un servlet que es el que va a recibir las credenciales y llamar a CAS a través del servicio REST.

Para crear el formulario simplemente editamos el fichero index.jsp de nuestro proyecto (o el que consideremos oportuno) y creamos el formulario con el siguiente contenido:

Usuario:

Contraseña:

Ahora vamos a registrar el servlet que va a recibir las credenciales y se va a encargar de realizar la lógica.

El siguiente paso es crear la clase LoginServlet con el siguiente contenido.

El servlet recupera las credenciales que le proporciona el usuario y a través de una llamada POST con la librería HttpClient, llama al servicio web de CAS que se encarga de la gestión de los tickets y que se encuentra en la url “https://raguilera.com:8443/cas/v1/tickets”, en caso de que las credenciales sean válidas, devuelve un ticket válido y en caso contrario null.

Con este ticket creamos la cookie de CAS que es consultada por todas las aplicaciones gestionadas y determina si el usuario ya ha realizado el login para no volver a pedírselo.

4. Lo probamos

Para probar esta funcionalidad lo mejor que podemos hacer es utilizar una extensión de Firebug llamada Firecookie que permite visualizar las cookies del navegador. La url es: https://addons.mozilla.org/es-es/firefox/addon/firecookie/

Arrancamos el servidor con la aplicación desplegada y accedemos a la url http://raguilera.com:8080/cas-restlet/ con lo que se mostrará el siguiente formulario:

Introducimos las credenciales y si son correctas deberemos que la cookie se ha creado con un contenido similar a este.

5. Conclusiones

Como veis hay solución para esta situación más que satisfactoria gracias a que trabajamos con una herramienta que expone su lógica a través de servicios web. Este mismo mecanismo se puede utilizar para securizar las aplicaciones de escritorio de nuestra empresa y poder utilizar el mismo sistema de autenticación que el resto de aplicaciones.

Cualquier duda o sugerencia en la zona de comentarios.

Saludos.