Hoy llegamos a la parte 4 donde explicaremos la configuración de la parte de Apereo CAS. En nuestro caso hemos utilizado, como habíamos comentando anteriormente, el CAS Overlay porque simplica el trabajo de configuración y despliegue del Apereo CAS. Suponiendo que hayas descargado la última versión desde GitHub, vamos a tocar los siguientes ficheros:

  • /etc/cas/config/cas.properties.
  • /etc/cas/services/cas_saml-100.json.
  • /etc/cas/services/adfs-101.json.
  • /etc/cas/metadata/adfs-metadata.xml.

Antes de comenzar

En el fichero build.gradle del CAS Overlay se han añadido las implementaciones de IDP, JSON Service Registry y LDAP. Posteriormente hemos ejecutado el comando ./gradlew clean build para crear el fichero WAR que usaremos. Para ejecutar el CAS hemos usado el comando java -jar build/lib/cas.war

También tendremos que crear un usuario que nos permita autenticar contra Directorio Activo para poder obtener la información de los usuarios. En el caso de este laboratorio el usuario creado es “APEREO USER”.

Fichero /etc/cas/config/cas.properties

as.server.name=https://apereolab.olimpo.lab:8443
cas.server.prefix=${cas.server.name}/cas
logging.config=file:/etc/cas/config/log4j2.xml
cas.authn.saml-idp.core.entity-id=https://apereolab.olimpo.lab/idp
cas.service-registry.json.location: file:/etc/cas/services
cas.authn.ldap[0].order=1
cas.authn.ldap[0].name=AD-OLIMPO
cas.authn.ldap[0].ldap-url=ldap://exlab.olimpo.lab:389
cas.authn.ldap[0].base-dn=dc=olimpo,dc=lab
cas.authn.ldap[0].bind-dn=CN=APEREO USER,OU=Administrators,DC=olimpo,DC=lab
cas.authn.ldap[0].bind-credential=<TU_PASSWORD>
cas.authn.ldap[0].type=AUTHENTICATED
cas.authn.ldap[0].subtreeSearch=true 
cas.authn.ldap[0].searchFilter=(&(objectClass=person)(sAMAccountName={user}))
cas.authn.ldap[0].principalAttributeList=sAMAccountName,mail,userPrincipalName

Fichero /etc/cas/services/cas_saml-100.json

Aquí nuevamente hemos hecho un poco de trampas para que capture cualquier URL.

{
  "@class": "org.apereo.cas.services.RegexRegisteredService",
  "serviceId": "http://.+",
  "name" : "cas_saml",
  "id" : 100,
  "evaluationOrder" : 100
}

Fichero /etc/cas/services/adfs-101.json

{
  "@class": "org.apereo.cas.support.saml.services.SamlRegisteredService",
  "serviceId": "http://fs.olimpo.lab/adfs/services/trust",
  "name": "adfs",
  "id": 101,
  "evaluationOrder": 101,
  "description": "adfs lab service",
  "logoutType": "NONE",
  "attributeReleasePolicy": {
    "@class": "org.apereo.cas.services.ReturnAllAttributeReleasePolicy",
  },
  "usernameAttributeProvider" : {
    "@class" : "org.apereo.cas.services.PrincipalAttributeRegisteredServiceUsernameProvider",
    "usernameAttribute" : "mail",
  },
  "requiredNameIdFormat": "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
  "metadataLocation": "/etc/cas/metadata/adfs-metadata.xml",
  "signAssertions": true,
  "signResponses": false
}

Fichero /etc/cas/metadata/adfs-metadata.xml

Este fichero se obtiene desde ADFS. Concretamente se debe acceder a la ruta https://fs.olimpo.lab/FederationMetadata/2007-06/FederationMetadata.xml y descargar el fichero XML para luego copiarlo en esta ruta.

Directorio /etc/cas/saml

Contiene la definición del IDP, certificado de firma, encriptación, etc.

ls
idp-encryption.crt  idp-encryption.key  idp-metadata.xml  idp-signing.crt  idp-signing.key  metadata-backups

Ya en la parte siguiente veremos algunas pruebas de funcionamiento y algunas mejoras que se pueden hacer para que todo vaya más fluido. Hasta el próximo episodio.