SingleSign on mit TYPO3

Wer schon mal mehrere Webapplikationen samt Nutzern verwalten musste kennt das leidige Thema, dass man ständig die Nutzer zwischen den Datenbanken synchronisieren muss.

Aus Sicht des Nutzers gibt es noch ein viel schlimmeres Problem. Der Nutzer muss sich mehrfach anmelden.

http://www.single-signon.com/ stellt eine einfache Lösung für TYPO3 zur Verfügung um SSO umzusetzen. Da die Dokumentation ziemlich gut ist, verzichte ich hier auf die Beschreibung der Installation des SSO Adapters für TYPO3 und konzentriere mich auf einige interessante Lösungen.

Bauen wir uns erstmal eine Seitenstruktur für unser Intranet

  • TYPO3 Template
    • Anwendungen (Übersicht mit Links zu SSO Adaptern
      • Tine20 SSO Adapter (wird später vorgestellt)
      • TYPO3 Backend SSO Adapter
      • Mantis SSO Adapter
      • Mediawiki SSO Adapter
      • PHPList SSO Adapter (wird später vorgestellt)

Die SSO Adapter sind jeweils als Weiterleitung auf die entsprechende Anwendung konfiguriert.

Umleitung auf verlinkten Bugreport mit SSO Authentifizierung im Mantis

Vorbereitungen in der config_inc.php vom Mantis:

$g_meta_include_file = '%absolute_path%/custom/meta_inc.php';
$g_logout_redirect_page         = 'custom_logout.php'; // enthält redirect auf {sso server}

Fügt man den folgenden Code nun in die custom/meta_inc.php ein (<?php ?> nicht vergessen), so werden anonyme Nutzer automatisch auf den SSO Adapter weitergeleitet und am Mantis authentifiziert. Natürlich landen Sie danach wieder auf der Seite mit dem zugehörigen Bugreport.

if ( !auth_is_user_authenticated() ) {
        if($_GET['return']) {
            setcookie('SSOredir',$_GET['return'],time()+60);
        }
        header('Location: http://{sso server url}/anwendungen/mantis/');
    } else {
        if($_COOKIE['SSOredir']) {
            header('Location: http://{mantis server url}/'.$_COOKIE['SSOredir']);
            setcookie('SSOredir','',time() - 3600);
        }
    }

Umleitung auf verlinkten Bugreport mit SSO Authentifizierung im Mediawiki

Auch bei Mediawiki läßt sich das obige Verhalten erreichen. dazu benötigen wir eine Mediawiki Extension diese wird in der Localsettings.php eingetragen

require_once($IP.'/extensions/RedirectToSSO/index.php');

In der Datei extensions/RedirectToSSO/index.php wird nun der Code zur Detection einer Anmeldung hinterlegt:

$wgExtensionCredits['RedirectToSSO'][]= array(
        'name'         => 'Redirect SSO',
        'version'      => '1.0.0',
        'author'       => 'Kay Strobach',
        'url'          => 'http://www.kay-strobach.de/',
        'description'  => 'redirect to sso adapter.'
    );
    $wgHooks['UserLoadFromSession'][] = 'RedirectToSSO';
    $wgCacheVaryCookies[] = 'SSOredir';

    function RedirectToSSO($user, &$result ) {
        global $wgOut, $wgPageToRedirectAfterLogout;
        if($_SESSION['wsUserID']==0) {
            $_SESSION['SSOredir'] = $_SERVER['REQUEST_URI'];
            $wgOut->redirect('http://{sso server url}/anwendungen/mediawiki/');
        } else {
            if($_SESSION['SSOredir']) {
                header('Location: http://{mediawiki server url}'.$_SESSION['SSOredir']);
                $_SESSION['SSOredir'] = '';
                #setcookie('SSOredir','',time() - 3600);
                die();
            }
        }
        return true;
    }

Dummerweise werden Nutzer nach dem Klicken auf Logout noch nicht wieder auf die Seite mit der Anwendungsübersicht weitergeleitet. Das Lässt sich in Mediawiki mit der Extension redirectAfterLogout erreichen.

$wgPageToRedirectAfterLogout = '{sso server url}/anwendungen/';
require_once($IP.'/extensions/redirectAfterLogout/redirectAfterLogout.php');