Projet

Général

Profil

Wiki » Historique » Version 1

Version 1/24 - Suivant » - Version actuelle
Gaston TJEBBES, 01/06/2010 16:04


Cassification d'une application sur Scribe

Scribe est fourni avec un serveur d'authentification SSO compatible CAS. Cette page a pour objectif de guider les utilisateurs (administrateurs) de Scribe à utiliser le mode SSO dans leurs applications web php. Les indications fournies permettent de garantir la compatibilité avec les version 0.5 et 1.0.1 de la librairie php-cas sur laquelle se base le paquet php5-cas.

Cas n°1 : authentification simple

Ici, seule l'authentification de l'utilisateur est nécessaire (l'application ne requière aucune autre information). La cassification de l'accès à une page reste très simple (fonctionnement du Cas classique). On utilisera la configuration centralisée située dans /usr/share/php/configCAS/cas.inc.php.

Initialisation du client

<?php
require_once('CAS/CAS.php');
require_once('configCAS/cas.inc.php');
phpCAS::client(__CAS_VERSION, __CAS_SERVER, __CAS_PORT, __CAS_URL, false);

Les variables __CAS... sont configurées dans le fichier 'cas.inc.php'. La variable à false signifie qu'une session php a déjà été démarrée avant l'appel au client.

Désactivation du contrôle de certificats

En attendant une méthode stable de gestion des certificats, nous utiliserons la méthode setNoCasServerValidation :

if (method_exists(phpCAS, 'setNoCasServerValidation')){
        phpCAS::setNoCasServerValidation();
}

L'utilisation de la fonction method_exists permet d'assuere la compatibilité avec les différentes version du client phpCas (paquet php5-cas)

Authentification

phpCAS::forceAuthentication();

La redirection vers le serveur CAS est effectuée si nécessaire, par la suite le code est éxécuté dans un contexte authentifié.

Déconnexion

if (isset($_REQUEST['logout'])) {
    if (method_exists(phpCAS, 'logoutWithUrl')){
        phpCAS::logoutWithUrl($_SERVER["SCRIPT_URI"]);
    }else{
        phpCAS::logout($_SERVER["SCRIPT_URI"]);
    }
}

La variable de redirection ici : $_SERVER["SCRIPT_URI"] peut être remplacée par la page de logout prévue au départ dans l'application.

Déconnexion centralisée

if (__CAS_LOGOUT){
    if (method_exists(phpCAS, 'logoutRequests')){
        phpCAS::logoutRequests();
    }
}

La variable __CAS_LOGOUT est configuré dans le fichier configCAS/cas.inc.php.
A noter : cette fonction fournit par le client CAS d'origine a un fonctionnement très limité, elle ne fonctionne pas lorsque le nom de la session est forcé par l'application cassifié (appel à session_name(nomdelasession)).
Dans ce cas, préféré l'utilisation de la librairie eolePhpCAS.

Forcer l'url de votre application auprès du serveur CAS

Dans certains cas, par exemple :
Accès au travers d'un reverseproxy d'une application http par le protocole https et port 80 fermé sur le reverseproxy.

Il peut être utile de forcer l'url de l'application.

phpCAS::setFixedServiceURL("https://adressedemonapplication");

Il est possible de construire l'url depuis les variables php ($_SERVER par exemple).

Récupération du login de l'utilisateur

phpCAS::getUser();

Le tout dans des fonctions

<?php
function cas_auth(){
   require_once('CAS/CAS.php');
   require_once('configCAS/cas.inc.php');
   phpCAS::client(__CAS_VERSION, __CAS_SERVER, __CAS_PORT, __CAS_URL, false);
   if (method_exists(phpCAS, 'setNoCasServerValidation')){
        phpCAS::setNoCasServerValidation();
   }
   if (__CAS_LOGOUT){
       if (method_exists(phpCAS, 'logoutRequests')){
          phpCAS::logoutRequests();
       }
   }
   phpCAS::forceAuthentication();
}
function cas_logout(
   require_once('CAS/CAS.php');
   require_once('configCAS/cas.inc.php');
   phpCAS::client(__CAS_VERSION, __CAS_SERVER, __CAS_PORT, __CAS_URL, false);
   if (method_exists(phpCAS, 'setNoCasServerValidation')){
        phpCAS::setNoCasServerValidation();
   }
   if (method_exists(phpCAS, 'logoutWithUrl')){
        phpCAS::logoutWithUrl($_SERVER["SCRIPT_URI"]);
    }else{
        phpCAS::logout($_SERVER["SCRIPT_URI"]);
    }
}
?>