SSO : Authentification automatique entre une session Windows et votre application web

Dans la mesure où les utilisateurs de votre parc informatique ouvrent
leurs sessions Windows sur un contrôleur de domaine de votre
infrastructure, vous pouvez utiliser la fonction d’authentification
intégrée de Windows (Windows Integrated Authentification) pour leur éviter
de re-saisir leur login et mot de passe lorsqu’ils se connectent, par
exemple, à votre intranet.


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

3 commentaires

  1. Appreciate any amazing posting. The site otherwise could possibly anybody wardrobe sort of data in such a excellent solution involving crafting? I own a business presentation next 1 week, with this particular within the seek out such facts.

  2. Appreciate any amazing posting. The site otherwise could possibly anybody wardrobe sort of data in such a excellent solution involving crafting? I own a business presentation next 1 week, with this particular within the seek out such facts.

  3. Bonjour,

    Votre article m’intéresse vivement.

    Je vous expose ma situation:

    Je suis en train de mettre en place un extranet pour un établissement scolaire.
    Celui-ci est hebergé en local sur un serveur debian avec apache2.
    Tous les ordinateurs du parc sont répartis sur deux AD.

    je souhaite que lorsque les utilisateurs se connecteront pour ouvrir leur session windows, et qu’il décide après cela d’aller sur l’extranet, il soit déjà authentifier grâce à leur session.
    J’ai suivi les instructions de votre article et je rencontre alors un petit soucis.
    l’AllowOverride est activé sur le serveur, je crée mon fichier « .htaccess » (je garde les mêmes paramètres que ceux de l’article, je ne sais pas si ceux-ci correspondent à des variables déjà paramétrées ou si je dois utiliser mes noms de domaines)dans le virtualhost et quand je vais sur le site j’obtiens une erreur:
    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Je vous remercie d’avance pour votre réponse

    Pierre HENNEBOIS

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *