Un exemple de mise en place de SSO est visible ci-dessous :
Dans cet exemple, on a 3 applications et le
SSO :
- app1 : L'administrateur a défini le thème menu pour cette application.
- app2 : L'administrateur a défini le thème mobile pour cette application.
- app3 : L'administrateur a défini le thème topbar pour cette application.
Il existe 4 utilisateurs :
- admin (mot de passe : admin) qui est administrateur du SSO et habilité sur toutes les applications
- userX (mop de passe : userX) X à remplacer par un chiffre de 1 à 3, avec :
- user1
- habilité sur app1
- a fait une demande d'accès à app2 qui n'a pas encore eu de réponse de la part de l'administrateur
- user2
- habilité sur app2 et app3
- a redéfini le thème de app3 pour utiliser hidden : le menu du SSO ne s'affichera donc pas du tout pour cet utilisateur sur app3
- user3
- habilité sur app1 et app3 au travers d'un groupe "Groupe 1 & 3" créé par l'administrateur (la manière dont l'habilitation est faite n'est pas visible des non-administrateurs)
- a fait une demande d'accès à app2 qui a été refusé par l'administrateur
- a modifié le language à "Anglais" dans son profil

Dans cet exemple, le SSO a été modifié pour être en lecture seule : Toutes les modifications sont désactivées.
Cependant, la langue étant gérée en partie dans un cookie, les modifications de langues sont visibles tant que l'utilisateur ne s'authentifie pas à nouveau
(la valeur de la base de données, en lecture seule, est alors réutilisée)
Vous pouvez voir ci-dessous le code écrit pour
app1. Les autres applications sont exactement sur le même modèle.
Gestionnaire
<racine>/sso/plugins/examples/App1Handler.class.php (Les classes peuvent être directement dans
plugins ou dans un sous dossier comme ici)
<?php
use sso\Handler;
use sso\AuthUser;
use sso\SsoClient;
class App1Handler extends Handler {
const COOKIE_NAME = 'auth_app1';
public function init(AuthUser $user, SsoClient $sso) {
$_COOKIE[self::COOKIE_NAME] = 1; // for first call
setcookie(self::COOKIE_NAME, 1, 0, $this->path); // for other calls
}
}
?>
Application
<racine>/app1/index.php
<?php
require_once(implode(DIRECTORY_SEPARATOR, array(__DIR__, '..', 'sso', 'lib', 'SsoClient.class.php')));
use sso\SsoClient;
$sso = SsoClient::getInstance('../sso'); // Initialise le SSO
$currentUser = $sso->auth(); // Authentifie l'utilisateur
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Language" content="fr" />
<?php $sso->displayMenuCssHeader() ?>
<title>Exemple SSO - Application 1</title>
</head>
<body>
<?php $sso->displayMenu() ?>
<h2>Application 1</h2>
<div>
<?php if (!isset($_COOKIE['auth_app1'])) { ?>
Non authentifié sur l'application.
<?php } else { ?>
Authentifié comme <b><?= htmlspecialchars($currentUser->name) ?></b>
<?php } ?>
</div>
</body>
</html>