Centrale Authenticatie Service (CAS) voor webontwikkelaars

CAS is de Centrale Authenticatie Service van Universiteit Gent. Via CAS kan u zich op verschillende UGent-webpagina's aanmelden met uw account.

Indien u zelf webtoepassingen ontwikkelt waarbij u gebruikers dient te authentificeren, kunt u in deze toepassingen gebruik maken van CAS. CAS biedt naast Single Sign-On ook Single Sign-Out en kan ook meer dan enkel de loginnaam teruggeven aan uw webtoepassingen.


Werking CAS

Uw webtoepassing brengt de gebruiker naar de CAS login pagina.

Na authenticatie redirect CAS de gebruiker naar de oorspronkelijke webtoepassing, die via de url als service parameter werd meegegeven. Indien de gebruiker ingelogd is in een andere webtoepassing, krijgt de gebruiker geen login pagina meer te zien. (= Single Sign-On)

Voor Single Sign-Out stuurt CAS een POST request naar alle toepassingen waar de gebruiker ingelogd is.

CAS kan uitgetest worden aan de hand van onderstaande instructies. Wenst u CAS te gebruiken voor lokaal development kunt u https://localhost:8080/** gebruiken. Hiervoor is geen aanvraag nodig.


Een CAS client opzetten

Registratie is vereist. U vult het volgende in:

  1. de url van uw webtoepassing
  2. een korte omschrijving van de webtoepassing
  3. de gewenste attributen

URL

Er wordt enkel een CAS service registratie overwogen voor url's die wijzen naar een bestaand ugent dns record.
Onbestaande dns gegevens of die nog in aanvraag zijn worden geweigerd.

Het dns record én de server moet onder controle zijn van UGent (geen externe opstellingen)
Via een 301 redirect kunnen externe opstellingen wel doorverwezen worden naar een interne opstelling mét CAS.

Gelieve er eerst voor te zorgen dat uw site over https aangeboden wordt.
Voor webshares gaat dit automatisch. Voor eigen webservers zie: https://helpdesk.ugent.be/webhosting/csr.php
CAS gebruikt de url van uw webtoepassing om de service parameter te vergelijken met geregistreerde webtoepassingen. Als in meerdere pagina's van een webtoepassing een CAS redirect voorkomt, kunt u de hoofd url doorgeven gevolgd door 2 *-en (= wildcards). Let hierbij op voor toepassingen die onder eenzelfde domein draaien.

https://foo.ugent.be/bar/**


Attributen (optioneel)

Standaard wordt de loginnaam (uid) teruggeven. Op aanvraag zijn ook volgende LDAP attributen mogelijk:

  • mail
  • department
  • givenname
  • surname
  • objectClass
  • lastenrolled
  • jobcategory
  • addressingtitle
  • extcategory
  • ugentID
  • faculty

U kunt op deze manier LDAP attributen opvragen zonder in uw toepassing de UGent LDAP aan te spreken. Naargelang de noden van de toepassingen kan de lijst aangepast worden.

Gebruik CAS enkel voor authenticatie en niet voor session management. Session management dient u te voorzien in uw webtoepassing. Zorg ervoor dat er na een succesvolle authenticatie bijgehouden wordt dat de gebruiker geauthenticeerd is.


Voorbeelden voor gebruikers


Eenvoudige CAS authenticatie op webshares

Op de webshares server is CAS op server niveau geïnstalleerd.
Via een wijziging in de .htaccess van uw site kunt u authenticatie afdwingen:

Authtype Cas
Require valid-user
Hiermee vraagt u de bezoeker in te loggen met een geldig UGent-account (dit is het cas attribuut uid).
Wie dat niet heeft kan uw site niet bezoeken.
Als u de tweede lijn wijzigt naar
Require user username
waarbij username de UGent loginnaam is kunt u ook op naam toegang verlenen.
U kunt ook de andere cas attributen gebruiken:
Require cas-attribute surname:Peters
geeft enkel toegang tot de site voor de gebruikers met de familienaam Peters.
Alle attributen die u inschakelt bij de CAS service registration kunnen gebruikt worden.

Meer info staat op https://github.com/apereo/mod_auth_cas


Voorbeelden in php

Opmerking: Indien u problemen ondervindt bij het updaten van uw systeem is het aangewezen een update van de CAS client te doen.


Vereisten

PHP 7.3

  • −with-curl
  • −with-openssl
  • −with-dom
  • −with-zlib

Algemeen voorbeeld

Voor php-applicaties kan bibliotheek phpCAS gebruikt worden: https://github.com/apereo/phpCAS : Download de meest recente versie
Onderstaand voorbeeld toont hoe de bibliotheek kan gebruikt worden.

Gelieve de locatie van het certificaat aan te passen naar de plaats waar het certificaat is opgeslagen! Wanneer het pad naar het certificaat verkeerd geconfigureerd is, leidt dit tot een oneindige redirect lus.

<?php

include_once('CAS.php');

//phpCAS::setDebug('/srv/vhost/mijnsite.ugent.be/htdocs/tmp/phpCAS.log'); // Schrijft debug informatie naar een log-file

// Parameters: CAS versie, url CAS server, poort CAS server, CAS server URI (idem als host),
// boolean die aangeeft of sessie moet gestart worden
phpCAS::client(CAS_VERSION_2_0,'login.ugent.be',443,'', true);

// Geeft aan vanaf welke server logout requests mogelijk zijn
phpCAS::handleLogoutRequests(true, array('login.ugent.be'));

// Locatie van het "trusted certificate authorities" bestand:
phpCAS::setCasServerCACert('/etc/ssl/certs/ca-certificates.crt');
// Geen server verificatie (minder veilig!):
//phpCAS::setNoCasServerValidation();
// Hier gebeurt de authenticatie van de gebruiker
phpCAS::forceAuthentication();

// Opvangen van logout requests
if (isset($_REQUEST['logout'])) {
        phpCAS::logout();
}


?>

<html>
  <head>
    <title>phpCAS simple client</title>
  </head>
  <body>
    <h1>Successfull Authentication!</h1>

    <p>the user's login is <b><?php echo phpCAS::getUser(); ?></b>.</p>
    <p>the attributes are:
    <?php
    echo '<ul>';
    $attr = phpCAS::getAttributes();
    foreach ($attr as $key => $value)
    {
        if(!is_array($value))
        {
                echo '<li>' . $key . ' => ' . $value . '</li>';
        }
        else
        {
                echo '<li>' . $key . '</li>';
                echo '<ul>';
                foreach($value as $v)
                {
                        echo '<li>' . $v . '</li>';
                }
                echo '</ul>';
        }
    }
    echo '</ul>';
    ?>

    </p>
    <p>phpCAS version is <b><?php echo phpCAS::getVersion(); ?></b>.</p>
    <p><a href="?logout=">Logout</a></p>

  </body>
</html>


UGCAS_Simple voorbeeld

Dit voorbeeld is specifiek ontworpen voor sites op UGent webshares, maar kan ook op andere plaatsen gebruikt worden.

UGCAS_Simple is een CAS client module die de gebruikersnaam van de persoon teruggeeft na een succesvolle login. Extra attributen of uitloggen worden niet ondersteund. UGCAS_Simple is te downloaden op UGCAS_Simple-0.3.zip en bevat:

  • UGCAS_Simple.php: php CAS module. Sla de module op in een map binnen uw PHP path!
  • hello.php: eenvoudig voorbeeld
  • hello2.php: licht uitgebreid voorbeeld

Een voorbeeld in java

Gebruik de Java Apereo CAS Client.

Met casServerUrlPrefix:

https://login.ugent.be
serverName:
https://JeCasService.ugent.be:443


Spring security

CAS authenticatie kan worden geïntegreerd in een Spring based toepassing d.m.v. Spring Security.

Spring Security biedt out-of-the-box ondersteuning voor CAS 3. Zie http://static.springsource.org/spring-security/site/docs/3.0.x/reference/cas.html voor de uitstekende online documentatie van Spring Security zelf. Ingeval u problemen ondervindt, gelieve ook ook de FAQ te bekijken op http://static.springsource.org/spring-security/site/faq.html#faq-start-simple

Een voorbeeld toepassing kan gedownload worden van CasSpringsecurityExample.zip. Ontwikkelaars dienen zeker de UserDetailService bean te herconfigureren naar de gewenste omgeving.


Maven

De Java CAS client kan ook eenvoudig geïntegreerd worden in een Maven-based build systeem:

<dependency>
    <groupId>org.jasig.cas</groupId>
    <artifactId>cas-client-core</artifactId>
    <version>3.6.4</version>
</dependency>

<dependency>
    <groupId>org.apereo.cas.client</groupId>
    <artifactId>cas-client-support-saml</artifactId>
    <version>${java.cas.client.version}</version>
</dependency>

SSL

Service tickets worden gevalideerd via een SSL connectie met de CAS server. Het is dus noodzakelijk dat het certificaat van de CAS server ingeladen wordt in de JVM waarop de Java toepassing zal draaien.

sudo $JAVA_HOME/bin/keytool -import -alias login.ugent.be -file CERTIFICATE_FILE
     -keystore $JAVA_HOME/jre/lib/security/cacerts

Een voorbeeld in .NET

Gebruik de Apereo .NET CAS Client.

Met casServerLoginUrl:

https://login.ugent.be/login
casServerUrlPrefix:
https://login.ugent.be
serverName:
https://JeCasService.ugent.be:443
ticketValidatorName:
Cas20