48 votes

Comment fonctionne le SSO avec Active Directory, qui permet aux utilisateurs de se connecter de manière transparente à une application web intranet ?

On me dit qu'il est possible de créer une application web qui ne nécessite pas de connexion. L'utilisateur se connecte à Windows, qui s'authentifie via une recherche Active Directory (LDAP). Il devrait ensuite pouvoir accéder à mon application web et ne jamais voir d'invite de connexion. Ces clients appellent cela l'authentification unique (peut-être à tort, ce qui explique en partie ma confusion).

Mais, d'après ce que j'ai lu dans la documentation de Tomcat, l'authentification unique (Single Sign On) est :

La vanne d'ouverture de session unique est utilisée lorsque vous voulez la possibilité de se connecter à n'importe laquelle des applications web votre hôte virtuel et ont alors leur identité re autres applications web sur le même hôte virtuel.

C'est parfaitement clair pour moi. L'utilisateur doit se connecter une fois et peut accéder à toutes les applications web sur une instance de Tomcat. Mais ce que j'ai besoin de faire, c'est de leur permettre de se connecter sans jamais fournir d'informations d'identification à mon serveur Tomcat.

Donc, pour que cela fonctionne, j'imagine que.. :

  • L'utilisateur demande une page
  • Le serveur ne voit pas de jeton de session et demande alors au client des informations d'identification.
  • Le navigateur du client, sans aucune intervention de la part de l'utilisateur, fournit des informations d'identification au serveur.
  • Ensuite, en utilisant les informations d'identification fournies par le navigateur du client, il effectue une recherche dans un LDAP.

J'ai vu quelques exemples qui utilisent des certificats côté client... en particulier le système PKI du ministère de la Défense, ce qui me semble logique car dans ces cas-là, il faut configurer Tomcat pour qu'il demande des certificats côté client mais en se connectant simplement à Windows, je ne vois pas comment cela fonctionnerait et quelles informations le navigateur transmettrait au serveur, etc. Est-ce que c'est pour cela que NTLM est utilisé ?

48voto

unixhacker2010 Points 826

Tout d'abord, et au cas où d'autres utilisateurs visiteraient cette page, seules certaines méthodes d'authentification permettent de réaliser un SSO sans invite. Ces méthodes sont les suivantes NTLM y Kerberos . LDAP - en revanche - ne vous permettra jamais d'effectuer un SSO sans invite.

NTLM est en fait NTLMv1 et NTLMv2. Ceux-ci sont très différents et NTLMv1 est obsolète en raison de graves problèmes de sécurité. Vous devriez éviter les solutions d'authentification Java qui n'identifient pas correctement si elles supportent NTLMv1 ou NTLMv2 parce qu'elles n'utilisent que le mot "NTLM" dans leur documentation. Il y a de fortes chances que les développeurs de cette solution de sécurité ne le sachent pas eux-mêmes, ce qui est une raison de plus pour chercher la sortie de secours.

Contrairement à la croyance traditionnelle, les protocoles NTLMv1 et NTLMv2 sont entièrement documentés par Microsoft, mais vous trouverez toujours des solutions qui prétendent avoir fait de l'ingénierie inverse. Il est vrai que cela était nécessaire avant que Microsoft ne documente les protocoles, je crois vers 2006 ou 2007. Quoi qu'il en soit, NTLMv1 est à proscrire. Il n'y a rien de mal à NTLMv2 en soi, mais Microsoft a progressivement abandonné NTLM (sous quelque forme que ce soit) dans tous ses produits en faveur de l'authentification Kerberos. NTLMv1 est mort depuis longtemps et NTLMv2 n'est plus utilisé par Microsoft que dans les cas où aucun contrôleur de domaine n'est disponible. En résumé : NTLM (sous quelque forme que ce soit) n'est pas vraiment la voie à suivre. Nous devrions en fait saluer Microsoft pour avoir adopté une approche basée sur les normes.

Il ne reste plus que Kerberos. Microsoft a créé un protocole pour négocier et transporter des informations d'authentification sur HTTP. Dans les produits Microsoft, ce protocole est connu sous le nom de " Authentification Windows intégrée "mais elle a été érigée en norme officielle sous le nom de SPNEGO . C'est ce que vous devez rechercher. SPNEGO supporte à la fois NTLMv2 et Kerberos comme mécanisme d'authentification sous-jacent, mais pour les raisons mentionnées ci-dessus, vous devriez choisir Kerberos plutôt que NTLMv2.

J'ai réussi à intégrer plusieurs applications Tomcat (fonctionnant sous Linux/Solaris) à Active Directory à l'aide de l'option Projet SPNEGO à SourceForge . J'ai trouvé que c'était l'approche la plus simple. Cela vous donne un SSO sans invite similaire à ce que fait, par exemple, un serveur Sharepoint. C'est très probablement ce à quoi vos utilisateurs s'attendent lorsqu'ils parlent de "SSO". La configuration correcte de Kerberos, la génération de clés et la mise en place de comptes "factices" dans Active Directory peuvent s'avérer fastidieuses, mais une fois qu'elles ont été mises en place, elles fonctionnent comme un charme.

La seule chose que je n'aime pas dans le Projet SPNEGO à SourceForge est que je ne comprends pas à quelle fréquence il effectue l'authentification. Je soupçonne qu'il le fait à chaque consultation de page plutôt qu'une fois par session. Je me trompe peut-être. Quoi qu'il en soit, cela met en évidence un autre élément à prendre en compte dans les solutions SSO : vous ne voulez pas mettre en œuvre une solution qui "spolie" votre fournisseur d'identité (disons Active Directory) avec des demandes inutiles.

3voto

Dans un environnement Windows Active Directory, l'authentification unique est utilisée pour signifier que la visite d'une page web interne porte vos autorisations de connexion Windows et que le serveur web peut agir en conséquence. NTLM est utilisé à cette fin, mais les implémentations les plus récentes utilisent Kerberos à la place.

Si vous ouvrez un site web Sharepoint Server, il sait qui vous êtes sans avoir besoin d'un nom d'utilisateur et d'un mot de passe de connexion, mais cela ne fonctionne que pour les sites web internes sur le même réseau, je ne pense pas que cela ait beaucoup de sens de fonctionner sur un site web public. (Je ne sais pas si vous voulez dire "hôte virtuel" comme dans un serveur virtuel Apache ou comme dans un serveur hébergé externalisé).

Voici un document de Microsoft décrivant le fonctionnement de l'authentification Kerberos sur un serveur web fonctionnant sous IIS / ASP.Net : http://msdn.microsoft.com/en-us/library/ff647076.aspx

Il semble possible de le faire avec Apache/Tomcat/Java. Voici un PDF décrivant la mise en œuvre de cette solution par une université britannique : http://gfivo.ncl.ac.uk/documents/UsingKerberosticketsfortrueSingleSignOn.pdf et un projet Codeplex pour cela : http://tomcatspnego.codeplex.com/ et Openfire disposent d'une documentation sur le fonctionnement général de Java/Kerberos ( http://community.igniterealtime.org/docs/DOC-1060 ).

0voto

Jon Winstanley Points 241

Il semble que vous décriviez ce que Microsoft appelle l'authentification intégrée de Windows.

Il semble que Tomcat prenne en charge l'authentification Windows, d'après les informations suivantes 本論文 .

-1voto

scarredNinja Points 26

Tout d'abord, vous ne pouvez pas éviter la connexion. Si vous voulez identifier les utilisateurs, vous devez leur demander de se connecter. Oubliez NTLM, Kerberos vient à la rescousse - il peut tout faire de manière totalement transparente.

Le SingleSignOnValve n'est pas ce que vous recherchez. Si vous utilisez Tomcat 7, vous pouvez utiliser l'option SpnegoAuthenticator immédiatement, mais sur 6, vous devez utiliser cette .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X