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