SALT > Modules > SSO > Manuel >
Ci dessous la liste des modifications à réaliser pour chaque application dont l'authentification devra être gérée par le SSO.

Gestionnaire

Il faut créer une classe fille de sso\Handler que l'on mettra dans le dossier (ou un sous dossier) de plugins du SSO
Si la classe s'appelle App1Handler, le nom du fichier devra être App1Handler.class.php.
Cette classe devra implémenter la méthode public function init(AuthUser $user, SsoClient $sso); et simuler l'authentification.
Par exemple, si l'application vérifie la présence d'un cookie nommé auth_app1 pour déterminer si l'utilisateur est connecté, on pourra utiliser l'implémentation suivante : <?php
use sso\Handler;
use 
sso\AuthUser;
use 
sso\SsoClient;

class 
App1Handler extends Handler {

    const 
COOKIE_NAME 'auth_app1';

    public function 
init(AuthUser $userSsoClient $sso) {
        
$_COOKIE[self::COOKIE_NAME] = 1// for first call
        
setcookie(self::COOKIE_NAME10$this->path); // for other calls
    
}
}
La méthode init() sera appelée à chaque page de l'application.

Il est également possible d'enregistrer des variables dans le SSO avec la méthode registerGlobals. Ces variables seront enregistrées en session et restaurées sur chaque page automatiquement dans des variables globales.
Cela peut être utilisé pour sauvegarder les traitements nécessaires à l'authentification.

Par exemple : <?php

class ... extends Handler {
    public function 
init(AuthUser $userSsoClient $sso) {

        global 
$var1;
        if (!isset(
$var1)) {
            
// connexion à la base de données de l'application
            // récupération du token de connexion de l'utilisateur depuis la base de données dans $var1, en utilisant $user->id

            // enregistrement de la variable dans la session
            
$sso->registerGlobals(array(
                
'var1' => $var1,
            ));
        }

        
$_COOKIE[self::COOKIE_NAME] = $var1;
        
setcookie(self::COOKIE_NAME$var10$this->path);
    }
}
Avec ce code :

Login avec SSO

Il faudra également modifier chaque page accessible pour appeler le SSO.
Si l'application inclus un fichier PHP sur chaque page, l'appel peut se faire dans ce fichier, sinon il faudra modifier réellement chaque page de l'application (qui est alors en général mal conçue)
Le code à ajouter est le suivant : <?php
require_once(implode(DIRECTORY_SEPARATOR, array(__DIR__'..''sso''lib''SsoClient.class.php'))); // charge la classe principale du SSO
$sso sso\SsoClient::getInstance('../sso'); // Initialise le SSO, le paramètre est le chemin web relatif jusqu'au SSO
$currentUser $sso->auth(); // Authentifie l'utilisateur
Si l'utilisateur n'est pas authentifié, la méthode auth() redirigera l'utilisateur vers la page de login du SSO.
Pour cela, ce code doit se trouver avant tout affichage sur chaque page.
Si l'utilisateur est authentifié, l'exécution continue et $currentUser peut être récupéré si besoin
Si l'on souhaite afficher le menu du SSO dans l'application cliente, il faut modifier le code de chaque page à 2 endroits : Si on ne peux pas modifier le contenu de la balise <head>, il est possible d'appeler la méthode suivante, n'importe où sur la page, dans la balise body (même juste avant sa fermeture) : ...
<?php $sso->displayFullMenuAfterBody(); ?>
</body>
Le style du menu sera alors ajouté à postériori, en javascript.

Déconnexion

Si l'application possède un lien Déconnexion, il faut le modifier et rediriger vers n'importe quelle page avec le paramètre sso_logout Par exemple : <a href="?sso_logout">Se déconnecter</a>

Utilisateur connecté

Dans l'application cliente il est possible de récupérer l'utilisateur connecté sur le SSO avec : <?php
$sso 
= \sso\SsoClient->getInstance(); // récupère l'instance actuelle du SSO
$user $sso->getUser(); // récupére l'utilisateur sous forme d'un objet AuthUser
?>
Lorsque l'utilisateur a été récupéré depuis une méthode d'authentification comme un LDAP ou une base de données, il est possible que certains champs soient également accessibles sur l'objet $user.
Par exemple, si l'utilisateur vient d'un LDAP, on pourra en général écrire : <?php
// dn est une propriété dynamique rajoutée sur l'objet AuthUser a partir des champs du LDAP
echo "Le chemin complet de l'utilisateur dans le LDAP est : ".$user->dn;

echo 
'<pre>';
print_r(get_object_vars($user)); // affiche l'ensemble des propriétés de l'utilisateur définies dans le LDAP
echo '</pre>';
?>