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>