Cette configuration Kerberos / AD est-elle possible?

10

Nous avons une configuration IDAM légèrement compliquée:

entrez la description de l'image ici

C'est-à-dire que la machine et le navigateur de l'utilisateur final sont assis dans un réseau avec l'AD parent, et notre application basée sur Jetty et l'AD avec lequel il peut parler (AD local) sont assis dans l'autre.

Il existe une approbation bidirectionnelle entre les deux AD. Le navigateur du réseau parent possède le domaine local dans les sites de confiance.

La configuration du serveur Jetty est la suivante:

  • il utilise un fichier keytab généré par rapport à un principal dans l'AD local
  • il s'exécute en tant que service Windows sous un utilisateur défini dans l'AD local
  • le domaine, le mappage domaine-domaine et kdc sont définis par rapport au domaine de l'AD local
  • il utilise spnego - isInitiator est défini sur false; doNotPrompt est vrai; storeKey est vrai

Le problème est:

  • comme test, l'accès au serveur à partir d'un navigateur à l'intérieur du réseau local (c'est-à-dire lié à l'AD local) fonctionne - les informations de débogage Kerberos apparaissent dans les journaux, je peux voir la négociation Kerberos correcte dans le trafic HTTP et l'utilisateur est connecté automatiquement . Brillant.
  • cependant , accéder au serveur à partir d'un navigateur à l'intérieur du réseau parent (c'est ainsi que nos utilisateurs feront les choses) ne fonctionne pas! Le navigateur récupère un 401, mais demande ensuite des informations d'identification qui, une fois entrées, donnent un écran vide. Ensuite, cliquer dans la barre d'adresse et appuyer sur Entrée fait l'une des deux choses, selon que les informations d'identification sont pour l'AD distant ou local:

    • les informations d'identification AD locales se connectent ensuite correctement, avec Kerberos à partir de zéro dans les journaux (demande GET, réponse 401 nonauth, demande d'en-têtes Kerberos, etc.)
    • les informations d' identification à distance AD ne consignent pas (requête GET, 401 réponse unauth, ce qui ressemble à un en- tête NTLM: Authorization: Negotiate <60 or so random chars>)

Quoi qu'il en soit, le fait qu'il incite est faux!

Y a-t-il une explication à ces symptômes? La configuration que nous avons peut-elle faire ce que nous voulons?

En ce qui concerne la description ci-dessus, cela pourrait être faux: toute configuration que j'ai mentionnée concernant le serveur Jetty devrait être précise, comme je l'ai fait. Je suis heureux de fournir plus de détails. Toute configuration concernant AD ou le navigateur du réseau parent est potentiellement suspecte, car elle n'est pas sous mon contrôle et j'ai eu la configuration rapportée plutôt que de la voir par moi-même.

Robert Grant
la source
TCP / 88 est-il ouvert entre le navigateur des serveurs répertoriés dans les résultats DNS pour _kerberos._tcp.OurITOrgDomain et _kerberos._tcp.partentdomain? pouvez-vous kinit à partir du «navigateur» de la machine avec les informations d'identification dont vous avez besoin pour vous authentifier sur le serveur Jetty?
Jacob Evans
roguelynn.com/words/explain-like-im-5-kerberos pourrait faire la lumière sur la façon dont votre pare-feu peut provoquer vos problèmes (encore une fois, 88 pour les deux dcs de votre client)
Jacob Evans
Il y a trop de variables pour une explication détaillée étape par étape sans effectuer une capture réseau. Ensuite, vous verrez rapidement si les SPN sont correctement configurés ou si le navigateur doit être configuré pour s'authentifier en silence.
user2320464

Réponses:

3

Sans voir la capture de paquets, je suppose que le SPN HTTP / www.website.com doit être enregistré sur le compte exécutant l'application. L'équipe des services d'annuaire de Microsoft a un excellent article en plusieurs parties sur ce sujet à l'URL suivante.

https://blogs.technet.microsoft.com/askds/2008/05/29/kerberos-authentication-problems-service-principal-name-spn-issues-part-1/

Exécutez une capture de paquets (netmon, Wireshark) à partir d'un client dans chaque environnement pour identifier le SPN recherché. Une fois cela déterminé, utilisez la cmd setspn pour l'enregistrer sur le compte exécutant l'application.

FWIW, Kerberos ne fonctionne que sur le LAN. Si quelqu'un a besoin d'un accès là où les contrôleurs de domaine ne sont pas accessibles, vous voudrez peut-être envisager un SSO tel que Shibboleth ou ADFS.

EDIT: comme mentionné par @ alex-h , les navigateurs devront être configurés pour s'authentifier silencieusement via Kerberos.

  • Internet Explorer - bien que l'article TechNet ne soit pas spécifiquement pour votre application, les étapes sont les mêmes.
  • Firefox - identique au lien IE, pas de correspondance exacte mais les étapes sont les mêmes.

Enfin, il s'agit d'un problème courant avec les déploiements Microsoft Sharepoint. Ils souhaitent que l'authentification unique via Kerberos se fasse en silence une fois que les utilisateurs se sont authentifiés sur le domaine. Ainsi, si les réponses ci-dessus ne résolvent pas votre problème, essayez de consulter leurs forums tels que les suivants:

Kerberos sur Chrome, Safari ou FireFox

user2320464
la source
Une bonne réponse, meilleure que la mienne!
Alex H
Merci à vous deux - cela me prendra quelques jours pour lire les documents liés, mais je n'ai pas abandonné la question ou quoi que ce soit!
Robert Grant
Euh, ce n'était pas vraiment ça, mais je pense qu'il est probablement préférable d'accepter cette réponse car la vraie est un cas très inhabituel que j'ajouterai comme réponse séparée. Merci beaucoup!
Robert Grant
0

Veuillez essayer d'abord à partir d'un navigateur qui ne dispose pas de NTLM activé (Chrome / Firefox). Il semble que le problème est que vous avez activé la pré-authentification et il est possible que l'approbation bidirectionnelle ne soit pas en place.

Pour la pré-authentification, consultez ici https://support.microsoft.com/en-us/kb/2749007 et ici https://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html .

Alex H
la source