Soporte CAS en el SSO de la UV

El CAS está soportado por el IDP/AS-PAPI de la UV.

El IDP implementa CAS v1, CAS v2 y CAS v3, pero sin PGT's (Proxy Granting Tickets) ni atributos SAML; es decir no soporta los URI's "/proxyValidate" ni "/proxy" o "/samlValidate" de CASv2. Sí que se soporta el devolver atributos utilizando el formato CASv3.

El problema del Logout

Observar que para poderse integrar con nuestro SSO es IMPRESCINDIBLE que el cliente soporte una forma de Logout. De hecho, para la correcta integración de un cliente CAS con el IDP/AS-PAPI siempre acaba siendo necesario crear aposta un sencillo script de "logout" (que borra el cookie de sesión y envía una imagen). Ver ejemplos.

Si el servidor a validar está fuera del dominio uv.es, pueden aparecer otros problemas debido al soporte por parte de los navegadores de los cookies de terceros. En ese caso el script deberá implementar una redirección en lugar de enviar una imagen.

Ejemplo de configuración con "mod_auth_cas"

Un sencillo cliente CAS se puede configurar en un servidor Apache instalando el módulo de autenticación "auth_cas". En un Linux Debian/Ubuntu está presente en la distribución:

 apt-get install libapache2-mod-auth-cas

Y un ejemplo de configuración con nuestro SSO sería:

  CASDebug On
  CASTimeout 3600
  CASIdleTimeout 1800
  # Debe terminar en /
  CASCookiePath /var/cache/apache2/mod_auth_cas/
  
  CASLoginURL https://as.uv.es/cgi-bin/AuthServer/login
  CASValidateURL https://as.uv.es/cgi-bin/AuthServer/serviceValidate
  
  # Directorio con los certificados de las CA.pem 
  # que certifican el IDP (todos hasta la raíz).
  # Separar los certificados en .pem y rodar en 
  # el directorio un "c_rehash ./"
  # El mod_cas (v1.0) NO ADMITE los SubjectAltNames: el certificado
  # del servidor debe estar a nombre del mismo. 
  CASCertificatePath /etc/ssl/certs/casserver
  # Si no valida, se puede quitar la validacion del servidor.
  CASValidateServer On

<directory /var/www/casprot/>
     AuthType CAS
     AuthName "CAS - Usuario en la Universitat de Valencia"
     Require valid-user
</directory>

ScriptAlias /casprot/cgi-bin/ /var/www/casprot/cgi-bin/
<Directory "/var/www/casprot/cgi-bin/">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Require valid-user
</Directory>


Observar que para que lo anterior funcione debe darse de alta el servidor en nuestro SSO IDP/PAPI. Y que será necesario añadir un script de "logout" similar a los mencionados más arriba dentro de "/var/www/casprot/cgi-bin/".

Ejemplo de configuración con "mod_auth_cas" con atributos

Las versiones más recientes del mod_auth_cas (Debian Buster, libapache2-mod-auth-cas v1.2-1) soportan devolver los atributos con CASv3.

En el ejemplo siguiente se han recalcado en negrita las principales modificaciones a la configuración para que el mod_auth_cas devuelva atributos. Los atributos le aparecen al CGI como variables de entorno prefijadas por HTTP_CAS_ (p.e. HTTP_CAS_MAIL=prueba.prueba@uv.es )

  CASDebug On
  CASTimeout 3600
  CASIdleTimeout 1800
  # Debe terminar en /
  CASCookiePath /var/cache/apache2/mod_auth_cas/
  
  # none,lax,strict
  CASCookieSameSite none
  CASCookieHttpOnly on
  CASCookieSecure on
  
  CASLoginURL https://as.uv.es/cgi-bin/AuthServer/login
  CASValidateURL https://as.uv.es/cgi-bin/AuthServer/p3/serviceValidate
  
  # Si no valida, se puede quitar la validacion del servidor.
  # (a veces lo ignora)
  CASValidateServer On
  
  CASAttributePrefix "CAS-"

<directory /var/www/casprot/>
     AuthType CAS
     AuthName "CAS - Usuario en la Universitat de Valencia"
     CASAuthnHeader CAS-REMOTEUSER
     Require valid-user
</directory>

ScriptAlias /casprot/cgi-bin/ /var/www/casprot/cgi-bin/
<Directory "/var/www/casprot/cgi-bin/">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Require valid-user
</Directory>


Universitat de Valencia

 PAPI-SSO (Single Sign On)