La solution SSO (Single Sign On) proposée ici se fonde sur un environnement où des utilisateurs sous Windows XP ouvrent leur session sur un contrôleur de domaine Active Directory / Windows Server 2003, et se connectent à un serveur Web Apache 2 / PHP 5.2.

Fonctionnement de l’authentification intégrée

Dans la mesure où l’utilisateur est authentifié sur le domaine dans Windows, le navigateur (Firefox, Internet Explorer ou Safari) va essayer de transmettre et de négocier cette identité avec un serveur Web sur lequel l’utilisateur se connecte.
Ce site doit être dans la zone de confiance (IE) ou dans la liste des sites pour lesquels ce type d’authentification est permise (network.automatic-ntlm-auth.trusted-uris sur Firefox)

Ce processus est totalement transparent pour l’utilisateur, et totalement sécurisé puisqu’aucune donnée sensible, notamment le mot de passe, n’est échangée entre le navigateur client et le serveur.

Configuration du serveur web

Une fois la partie client paramétrée, passons côté serveur.

Ce dernier doit pouvoir traiter les données transmises par le navigateur et vérifier l’identité de l’utilisateur. Ici, nous allons ouvrir une session sur le Domaine Windows en installant le module d’authentification NTLM d’apache 2 :

apt-get install libapache2-authenntlm-perl

Ceci fait, vous pouvez configurer l’authentification NTML dans le VirtualHost de votre site, ou dans un fichier .htaccess si la directive AllowOverride vous le permet :

PerlAuthenHandler Apache2::AuthenNTLM
AuthType ntlm,basic AuthName “Merci de vous authentifier”
require valid-user
PerlAddVar ntdomain "NETBIOS_DOMAIN_NAME DOMAIN_CONTROLER_HOSTNAME"
PerlSetVar defaultdomain NETBIOS_DOMAIN_NAME
PerlSetVar splitdomainprefix 1


Tester l’authentification

Créez un fichier info.php à la racine de votre site (pensez à le supprimer une fois votre test terminé) en y écrivant :

<php
phpinfo();
?>


Ouvrez une session Windows sur une machine du domaine. Lancez votre navigateur Web et accédez au fichier info.php. Si tout se passe bien, vous devriez retrouver votre identifiant de session Windows dans le paramètre d’environnement REMOTE_USER :

<?php
getenv('REMOTE_USER');
?>


Troubleshooting

Si l’authentification SSO ne fonctionne pas :

  • Vérifiez que l’adresse de votre site est dans la liste des sites de confiance pour Internet Explorer
  • Vérifiez que l’adresse de votre site est bien listée dans le paramètre de configuration de Firefox (network.negotiate-auth.trusted-uris, voir : http://en.wikipedia.org/wiki/Integrated_Windows_Authentication#Supported_browsers
  • Vérifiez les paramètres NETBIOS_DOMAIN_NAME et DOMAIN_CONTROLER_HOSTNAME de votre fichier de configuration sur le serveur