UGent WebAuth

UGent WebAuth

Webauth is een centrale authenticatieservice voor UGent-studenten en medewerkers. Via webauth kan u zich op verschillende UGent-webpagina's aanmelden met uw centraal wachtwoord.

Indien u zelf webtoepassingen ontwikkelt waarbij u gebruikers dient te authentificeren, kunt u in deze toepassingen gebruik maken van het UGent WebAuth mechanisme. Uw webtoepassing brengt de gebruiker naar de webauth login pagina, om daar in te loggen.

Werking webauth

WebAuth encrypteert de loginnaam middels public/private key encryptie. De publieke sleutel kan worden gedownload vanaf https://webauth.UGent.be/UGent.pub, of letterlijk overgenomen worden van hieronder:

-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANEINsPFbISJtx0b23iiOj2y+gtx/pWf
4sbeGgZhn4eIUGMxI1+5UpJMT1Wh+fgqvhJzkv5O8G7S2rfjz6oKRxkCAwEAAQ==
-----END PUBLIC KEY-----

Het is aan te raden de publieke key in een directory buiten uw tree op de server te plaatsen en er via een absoluut pad naar te verwijzen. Het pad wordt dan bv.
$pubkey = openssl_get_publickey('file:///etc/webauth/ugent.pub') or die();

Webauth biedt enkel authenticatie, geen session management. Session management dient u te voorzien in uw applicatie. Een sessie opbouwen kan vb. met gegevens opgevraagd uit LDAP.

Schematisch voorgesteld:

Voorbeelden voor gebruikers

Een voorbeeld in php

webauth_test is een eenvoudige webtoepassing (php-script) die de identiteit van de gebruiker afdrukt. Hieronder de source code van dit script:

<?
$pubkey = openssl_get_publickey('file://ugent.pub') or die();

if (isset($_GET['key'])) {
    $ticket = $_GET['key'];
    $ticket = strtr($ticket,'*-.','+/=');
    $ticket = base64_decode($ticket);
    if (openssl_public_decrypt($ticket,$data,$pubkey)) {
        $_data = explode(":",$data);
        list($user,$time,$aid) = $_data;
    }
}

if (!$user) {
    header('Location: https://webauth.ugent.be/?url=https://catalpa.ugent.be/webauth_test/');
    exit();
}

header('Content-type: text/plain');

?>
user : '<?= $user ?>'
time : '<?= strftime('%Y/%m/%dT %H:%M:%S', $time) ?>'
aid  : '<?= $aid ?>'

Een voorbeeld in java

De action die de login doet is een struts action. Struts is een framework om webtoepassingen te ontwikkelen.
import org.apache.struts.action.*;
import java.security.interfaces.RSAPublicKey;
import java.security.Security;
import javax.crypto.*;
import java.io.*;
import org.bouncycastle.openssl.PEMReader;

public class DoWebAuthLoginAction extends Action {

   protected String action (ActionMapping mapping, ActionForm f,
        HttpServletRequest request, HttpSession session)
        throws Exception {
        // Key parameter uit de request halen
        String urlkey=request.getParameter ("key");
        System.out.println(urlkey);
        // org.apache.xml.security initialiseren
        org.apache.xml.security.Init.init();
        // De urlkey base 64 decoderen
        byte[]
urlout=org.apache.xml.security.utils.Base64.decode(translate(urlkey));
      
        // De publieke sleutel inlezen van een bestand
        Security.addProvider(new
org.bouncycastle.jce.provider.BouncyCastleProvider());
        FileReader keyFile = new FileReader("UGent.pub");
        PEMReader kreader = new PEMReader(keyFile);
        RSAPublicKey key = (RSAPublicKey) kreader.readObject();
      
        // De key parameter decoderen naar een string van de volgende
vorm: Userid:Timestamp:applicationID
        Cipher c = Cipher.getInstance("RSA");
        c.init(Cipher.DECRYPT_MODE,key);
        byte[] decryptedText = c.doFinal(urlout);
        String msg = new String(decryptedText);
        System.out.println(msg);

       // Doe er verder hier iets nutigs mee.

        return "succes";
}
Reacties op de inhoud: helpdesk@dict.UGent.be
Startpagina Helpdesk DICTHelpdesk DICT
Universitaire sites...

English | Contact | Vragen | Print | Nieuws