Instal•lació i configuració d’un servidor SSO

Fa uns mesos, mentre arreglàvem el mon fent una cervesa amb el meu amic Jordi (K2), em va parlar d’una consulta que li havien fet dies abans.

Estava tractant amb un client on tenien diferents aplicacions web que realitzaven l’autenticació mitjançant el mètode d’autenticació bàsica (http://es.wikipedia.org/wiki/Autenticación_de_acceso_básica) configurada a nivell del servidor web Apache.

Després d’autenticar-se a una aplicació, al voler accedir en una altra, s’havia de repetir el procés d’autenticació. Això era molest i volien canviar-ho per que només calgués fer el procés d’autenticació una vegada.

Com temps enrere ja m’havia trobat en aquesta situació li vaig parlar de la metodologia SSO.

Segons la Viquipèdia:  L’ autenticació únicasingle sign-on (SSO), en anglès, és un mètode que permet a un/a usuari/ària haver de procedir només a una autenticació (comprovació de la conformitat de dades transmeses generalment per mitjà d’Internet) per accedir a diverses aplicacions informàtiques o llocs web. Un bon exemple d’això el tenim en les aplicacions ofereix Google: es pot accedir a Gmail, GoogleDocs, Google +, etc fent l’autenticació només una vegada tot i ser aplicacions diferents.

A arrel d’això vaig decidir escriure un article explicant com implementar un sistema SSO, que és el que esteu llegint en aquests moments.

Per implementar un sistema SSO farem servir el CAS Server. El CAS Server es una infraestructura creada a la universitat de Yale i que al 2004 va passar a ser un projecte de la gent de Jasig (http://www.jasig.org) És open source, senzill i està implementat amb Java, per tant, què més volem?

Tenir un CAS Server instal·lat és molt senzill. Només cal seguir els passos que explicaré a continuació i de ben segur que no tindreu cap problema, al cap i a la fi és una aplicació web que córrer sobre Tomcat i llestos.

Per tenir el Tomcat a punt només cal fer el de sempre: descarregar-lo, descromprimir-lo i arrencar-lo executant l’script del directori bin startup.bat o startup.sh (segons el S.O.). Un cop tenim el Tomcat arrancat podem accedir als contextos de les 3 aplicacions que hi ha:

/app1: Aplicació web java d’exemple per logar-se al CAS Server
/app2: Una segona aplicació web java per també logar-se al CAS Server

Les dues aplicacions tenen la següent estructura:

/index.html
/secured
/secured.html
/WEB-INF/web.xml
/WEB-INF/lib/cas-client-core-3.2.1.jar
 

El fitxer cas-client-core-3.2.1.jar és un jar amb les classes necessàries per que l’aplicació pugui logar-se al CAS Server)

Al fitxer web.xml hi trobem la definició del filtre que controlarà les peticions i comprobarà si s’han autenticat previament o no reenviant-les al CAS Server en aquest últim cas.

<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://localhost:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:8080</param-value>
</init-param>
</filter>

Amb el següent filter mapping indiquem els recursos que protegirem.

<filter-mapping> 
    <filter-name>CAS Authentication Filter</filter-name> 
    <url-pattern>/secured/*</url-pattern> 
</filter-mapping>

NOTA: En aquest exemple estem fent servir aplicacions web Java per accedir al CAS Server però exiteixen mòduls que permeten connectar-s’hi des d’aplicacions .NET, PHP o el mateix servidor web Apache.

Si accedim a http://localhost:8080/app1/ veurem la pàgina principal de l’aplicació on hi tenim dos enllaços: un per anar a la zona segura de la pròpia app1 i l’altre per anar a la zona segura de l’app2 (accedint a http://localhost:8080/app2/ trobem el mateix però a l’inrevés)

Quan cliquem a l’enllaç secured zone, al no haver-nos autenticat previament, l’aplicació ens redirigirà al CAS Server per fer l’autenticació:

El CAS Server fa servir uns handlers per saber com ha de realitzar l’autenticació. En aquest cas, ve predefinit amb un handler d’autenticació que és una instància de la classeSimpleTestUsernamePasswordAuthenticationHandler (línia 128 del fitxer WEB-INF/deployerConfigContext)

Aquest handler simplement comproba que usuari i password siguin la mateixa paraula i, si és així, dóna per bó el procés d’autenticació (és un handler de test)

Els handlers més coneguts serien els següents:

  • AcceptUsersAuthenticationHandler: En el mateix fitxer de configuració indicariem el llistat d’usuaris amb els seus passwords.
  • FileAuthenticationHandler: El llistat d’usuaris amb els seus passwords estaria en un fitxer extern.
  •  SearchModeSearchDatabaseAuthenticationHandler: Els usuaris s’obtenen de bdd.
  • BindLdapAuthenticationHandler: Els usuaris s’obtenen d’un LDAP.

Un cop realitzem l’autenticació se’ns redirigeix a la pàgina secured.html dins de la zona protegida de l’aplicació:

Ara, podem, navegar entre les dues aplicacions havent fet l’autenticació només a una d’elles. Cada vegada que entrem a la zona protegida de les aplicacions, el filtre definit més amunt comprovarà que estem validats i deixarà passar les peticions.

I així, de senzill, ja tenim instal·lat un servidor SSO i dues aplicacions configurades. Els següents passos serien canviar el handler d’autenticació per un altre que, per exemple, es connecti a la bdd d’usuaris i canviar la pàgina d’autenticació del CAS Server per tenir l’aspecte que nosaltres volem.

Espero que aquest article us hagi servit. L’objectiu era fer una petita introducció del CAS Server explicant la mínima configuració. Si voleu més informació seguiu els següents enllaços:

https://wiki.jasig.org/display/CAS/Home (arquitectura i detalls del projecte CAS Server)

https://wiki.jasig.org/display/CASUM/Home (Documentació tècnica per desenvolupadors)

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *