Pour un site, j’avais dû réaliser une authentification par LDAP, en utilisant PHP. Il s’avère que cette authentification robuste nécessite que l’utilisateur s’identifie trop fréquemment.
L’idée est de faire une authentification automatique grace à ses informations de session Windows, transmises directement au serveur Apache qui fera un contrôle avec le serveur LDAP.
Je pars du principe que vous avez déjà un site opérationnel (donc Apache et autre sont déjà installés et correctement configurés)
Il faut installer quelques paquets supplémentaires:
apt-get install -y libapache2-mod-auth-kerb krb5-user
Sur un serveur de domaine du domaine, il faut exécuter la commande
ktpass -princ HTTP/serveur-a-tester.mon-domaine.local@MON-DOMAINE.LOCAL -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapuser Utilisateur -pass MotDePasse -out C:\temp\keytab.txt
« serveur-a-tester.mon-domaine.local » est le serveur Apache sur lequel fonctionne votre application
« MON-DOMAINE.LOCAL » (a adapter mais en gardant les majuscules) est le domaine actuel de l’ActiveDirectory
« Utilisateur » et « MotDePasse » sont les identifiant d’un utilisateur de l’AD pour se connecter au serveur Apache, il peut s’agir d’un utilisateur spécifie (Compte de services par exemple)
Le plus important est le fichier final « keytab.txt » : il faut le transférer sur le serveur dans /etc/mon-domaine.local.keytab par exemple
Changer les droits
chown root:www-data /etc/mon-domaine.local.keytab chmod 640 /etc/mon-domaine.local.keytab
On modifie ensuite le fichier /etc/krb5.conf
[libdefaults] default_realm = MON-DOMAINE.LOCAL # The following krb5.conf variables are only for MIT Kerberos. krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true v4_instance_resolve = false v4_name_convert = { host = { rcmd = host ftp = ftp } plain = { something = something-else } } fcc-mit-ticketflags = true [realms] MON-DOMAINE.LOCAL = { kdc = ldap.mon-domaine.local admin_server = ldap.mon-domaine.local default_domain = mon-domaine.local } [domain_realm] .mon-domaine.local = MON-DOMAINE.LOCAL mon-domaine.local = MON-DOMAINE.LOCAL [login] krb4_convert = true krb4_get_tickets = false
On rajoute ce qu’il faut dans le fichier de configuration de notre vhost Apache, dans la directive « Directory »
AuthName "Login & Mot de passe" KrbServiceName HTTP AuthType Kerberos Krb5Keytab /etc/mon-domaine.local.keytab KrbAuthRealms MON-DOMAINE.LOCAL KrbMethodNegotiate On KrbMethodK5Passwd On Require valid-user
On restart Apache et on teste
Par défaut Firefox et InternetExplorer ne sont pas prévu pour échanger ces infromations, une fenêtre de connexion apparaît donc. Il suffit de mettre votre login et votre mot de passe pour être identifié correctement.
Pour valider automatiquement le SSO, il faut aller dans about:config de Firefox et chercher les instances
network.negotiate-auth.delegation-uris network.negotiate-auth.trusted-uris
Mettre « mon-domaine.local » dans les 2 champs et l’authentification sera envoyée automatiquement de Windows vers Apache