Comment l'authentification unique avec Active Directory fonctionne-t-elle lorsque les utilisateurs sont connectés de manière transparente à une application Web intranet?

40

On me dit qu'il est possible de créer une application Web ne nécessitant pas de login. L'utilisateur se connecte à Windows, qui s'authentifie via une recherche LDAP (Active Directory). Ensuite, ils devraient pouvoir accéder à mon application Web et ne jamais voir une invite de connexion. Ces clients se réfèrent à cela en tant que Single Sign On (peut-être incorrectement et une partie de ma confusion).

Cependant, d'après ce que j'ai lu de Single Sign On à partir de la documentation Tomcat:

La valve de connexion unique est utilisée lorsque vous souhaitez donner aux utilisateurs la possibilité de se connecter à l'une des applications Web associées à votre hôte virtuel , puis de faire reconnaître leur identité par toutes les 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 d'une instance de tomcat. Mais, ce que je dois faire, c'est leur permettre de se connecter sans jamais fournir d'informations d'identification à mon serveur Tomcat.

Donc, pour que cela fonctionne, j'imagine:

  • L'utilisateur fait une demande pour une page
  • Le serveur ne voit aucun jeton de session, puis demande au client des informations d'identification.
  • Le navigateur du client sans aucune intervention de l'utilisateur fournit des informations d'identification au serveur.
  • Ensuite, à l'aide des informations d'identification fournies par le navigateur du client, il effectue une recherche dans un LDAP.

J'ai vu des exemples qui utilisent des certificats côté client ... en particulier le système PKI DoD, ce qui me semble logique car dans ce cas, vous configurez Tomcat pour qu'il demande des certificats côté client , mais vous vous connectez simplement à Windows. Je ne vois pas comment cela fonctionnerait et quelles informations le navigateur transmettrait au serveur, etc. Est-ce à quoi sert NTLM?

blak3r
la source

Réponses:

40

Tout d’abord, et au cas où d’autres utilisateurs visiteraient cette page, il n’existe que certaines méthodes d’authentification qui vous permettent d’effectuer une connexion unique rapide. Ce sont NTLM et Kerberos . LDAP - en revanche - ne vous donnera jamais un SSO rapide.

NTLM est en fait NTLMv1 et NTLMv2. Celles-ci sont très différentes et NTLMv1 est obsolète en raison de graves problèmes de sécurité. Vous devez éviter les solutions d'authentification Java qui ne permettent pas d'identifier correctement si elles prennent en charge NTLMv1 ou NTLMv2 car elles utilisent uniquement le mot "NTLM" dans leur documentation. Il est fort probable que le développeur de cette solution de sécurité ne se connaisse pas, ce qui est une raison de plus pour rechercher une sortie de secours.

Contrairement à la croyance traditionnelle, NTLMv1 et NTLMv2 sont entièrement documentés par Microsoft, mais vous trouverez toujours des solutions prétendant avoir «inversé le protocole». Il est vrai que cela était nécessaire avant que Microsoft ne documente les protocoles entre 2006 et 2007, selon moi. En tout cas, NTLMv1 est un non-non. Il n’ya rien de mal avec NTLMv2 en soi, mais Microsoft élimine NTLM (sous n’importe quelle forme) dans tous ses produits en faveur de l’authentification Kerberos. NTLMv1 est mort depuis longtemps et NTLMv2 est désormais utilisé par Microsoft uniquement dans les cas où aucun contrôleur de domaine n'est disponible. En bout de ligne: NTLM (sous n’importe quelle forme) n’est pas vraiment la voie à suivre. Nous devrions en réalité féliciter Microsoft d'avoir adopté une approche basée sur des normes.

Cela vous laisse avec Kerberos. Microsoft a créé un protocole pour la négociation et le transport des informations d'authentification via HTTP. Ceci est connu dans les produits Microsoft comme " Authentification Windows intégrée ", mais il a été défini comme une norme officielle sous le nom de SPNEGO . C'est ce que vous devriez rechercher. SPNEGO prend en charge NTLMv2 et Kerberos en tant que mécanisme d'authentification sous-jacent, mais pour les raisons susmentionnées, vous devriez cibler Kerberos plutôt que NTLMv2.

J'ai intégré avec succès plusieurs applications Tomcat (fonctionnant sous Linux / Solaris) avec Active Directory à l'aide du projet SPNEGO de SourceForge . J'ai trouvé que c'était l'approche la plus simple. Cela vous donne une connexion unique rapide, similaire à ce que fait, par exemple, un serveur Sharepoint. C’est très probablement ce à quoi vos utilisateurs s’attendent quand on parle de «SSO». Obtenir la configuration correcte de Kerberos, générer des clés et configurer des comptes «factices» dans Active Directory peut s'avérer fastidieux, mais une fois que vous l'aurez compris, cela fonctionne à merveille.

La seule chose que je n'aime pas dans le projet SPNEGO de SourceForge, c'est que je ne comprends pas à quelle fréquence il effectue l'authentification. Je soupçonne mal qu’il le fasse pour chaque affichage de page plutôt qu’une fois par session. Peut-être que je me trompe. Quoi qu'il en soit, cela met en évidence un autre élément à prendre en compte dans les solutions d'authentification unique: vous ne souhaitez pas implémenter une solution qui «spams» votre fournisseur d'identité (par exemple, Active Directory) avec des requêtes inutiles.

unixhacker2010
la source
2
Merci, fait la réponse acceptée. Une chose à ajouter à votre liste de connexions rapides est les connexions de certificat x509 ... comme les cartes CAC du gouvernement.
blak3r
C'est une réponse fantastique, même s'il a 6 ans! Je voterais x10 si je pouvais!
Tim S.
2

Dans un environnement Windows Active Directory, la signature unique signifie 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é pour cela, mais les nouvelles implémentations utilisent Kerberos à la place.

Si vous ouvrez un site Web Sharepoint Server, celui-ci sait qui vous êtes sans avoir besoin d'un nom d'utilisateur et d'un mot de passe de connexion. Toutefois, cela ne fonctionne que pour les sites Web internes du même réseau. (Je ne peux pas dire si vous voulez dire "hôte virtuel" comme dans un hôte Apache ou comme dans un serveur hébergé externalisé).

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

Cela semble possible avec Apache / Tomcat / Java. Voici un fichier PDF décrivant une implémentation de cette université britannique: http://gfivo.ncl.ac.uk/documents/UsingKerberosticketsfortrueSingleSignOn.pdf et un projet Codeplex pour elle: http://tomcatspnego.codeplex.com/ et Openfire en ont la documentation relative à l'utilisation de Java / Kerberos en général ici ( http://community.igniterealtime.org/docs/DOC-1060 ).

TessellatingHeckler
la source
0

Cela ressemble-t-il à ce que vous décrivez ce que Microsoft appelle l’authentification intégrée de Windows?

Il semble que Tomcat prenne en charge l'authentification Windows, basée sur cet article .

Artomegus
la source
-1

Pour commencer, vous ne pouvez pas éviter la connexion. Si vous souhaitez identifier des utilisateurs, vous devez les connecter. Oubliez NTLM, Kerberos vient à la rescousse - il peut tout faire de manière totalement transparente.

La SingleSignOnValve n'est pas ce que vous recherchez. Si vous utilisez Tomcat 7, vous pouvez utiliser le SpnegoAuthenticator tout de suite , mais le 6 vous devez utiliser ce .

Michael-O
la source
Peu confus ... les première et deuxième phrases semblent contredire. Avec Kerberos, l'utilisateur n'est pas invité à se connecter?
blak3r
1
Non, ils ne le font pas. Voyez la situation dans son ensemble, grâce à Kerberos, l’utilisateur entre ses informations d’identité une fois manuellement, puis chaque connexion est automatiquement effectuée pour son compte. Cela ne signifie pas qu'aucune connexion ne se produit alors. C'est ce que tu as écrit.