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:- als u een (login) sessie aangemaakt heeft, ga naar de applicatie
- anders: gebruik de key die u van webauth kreeg om een sessie aan te maken
- of anders: ga naar webauth (om een key te vragen)
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";
}


