J'ai eu faire quelques recherches pour monter un SSO en PHP couplé à AD (Active Directory).
Après quelques recherches, j'ai trouvé le moyen, et il est simplissime. Je le partage avec vous car ca peut se révéler utile.
Coté serveur (système)
Installation des dépendances :
apt-get install libapache2-mod-perl2 perl build-essential
apt-get install libapache2-authenntlm-perl
Modification de la conf apache (modifiez les paramètres DOMAIN, DC1, DC2, SITE avant de copier-coller comme un bourrin !) :
cat >> /etc/apache2/sites-enabled/000-default <<TXT
PerlModule Apache2::AuthenNTLM
<Directory "/var/www/SITE">
PerlAuthenHandler Apache2::AuthenNTLM
AuthType ntlm,basic
AuthName paipartners
require valid-user
PerlAddVar ntdomain "DOMAIN DC1 DC2"
PerlSetVar defaultdomain DOMAIN
PerlSetVar splitdomainprefix 1
</Directory>
TXT
Vous trouverez de la doc sur la config de ce module Perl sur ce lien.
Config hosts
vi /etc/hosts
# Ajouter
192.168.10.99 domain.ext DOMAIN DC1 DC2
Config resolv.conf
vi /etc/resolv.conf
# Ajouter
search domain.ext
nameserver IP_DC1
nameserver IP_DC2
Et enfin un petit restart d'apache
/etc/init.d/apache2 restart
Coté serveur (php)
Vous pouvez récupérer le login de la personne via la clé REMOTE_USER
de la variable
$_SERVER
:
<?php
echo "Hello " . $_SERVER['REMOTE_USER'] . " !";
Si vous devez par la suite checker des droits applicatifs renseignés dans AD, il vous suffit d'interroger AD via
l'extension ldap
de PHP.
Coté client
Il faut rajouter dans la base de registre (regedit.exe) la clé DWORD
suivante HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Lsa/LmCompatibilityLevel
avec la valeur 1
.
Allez faire un tour sur ce lien de Ms Technet pour comprendre à quoi sert cette clé.
Enfin il ne reste plus qu'à ajouter l'url de votre site dans les sites trustés pour chaque browser utilisé. Pour
Firefox, allez dans about:config
et mettez votre url dans la valeur network.automatic-ntlm-auth.trusted-uris
.