<p>D’un point de vue Windows uniquement :</p>
<h2><a name="p-19718-ntlm-1" class="anchor" href="#p-19718-ntlm-1" aria-label="Heading link"></a>NTLM</h2>
<ul>
<li>
<p>fonctionne avec <em>à la fois</em> les clients <strong>externes</strong> (hors domaine) et <strong>internes</strong></p>
</li>
<li>
<p>fonctionne avec à la fois les <strong>comptes de domaine</strong> et les <strong>comptes d’utilisateurs locaux</strong> sur la machine IIS</p>
</li>
<li>
<p>avec les comptes de domaine, <strong>seul le serveur</strong> nécessite une connectivité directe avec un contrôleur de domaine (DC)</p>
</li>
<li>
<p>avec les comptes locaux, vous n’avez besoin de connectivité nulle part <img src="//forum-microsoft.fr/images/emoji/twitter/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
</li>
<li>
<p>vous n’avez pas besoin d’être connecté en tant que l’utilisateur en question pour utiliser un identifiant</p>
</li>
<li>
<p><em>Aparté</em> : il n’est pas si rare qu’un DC soit submergé par un serveur NTLM occupé (IIS, Exchange, TMG/ISA, etc.) avec le volume de requêtes NTLM (pour atténuer : <a href="https://support.microsoft.com/en-us/kb/2688798"><code>MaxConcurrentAPI</code></a>, <a href="https://www.iis.net/configreference/system.webserver/security/authentication/windowsauthentication"><code>AuthPersistSingleRequest</code> (false)</a>, des DC plus rapides.) (<a href="https://blogs.technet.microsoft.com/tristank/2011/10/27/configuring-kerberos-for-sharepoint-farms-a-generic-gotchas-list/">Bonus auto-référentiel</a>.)</p>
</li>
<li>
<p><strong>nécessite une connectivité client <em>uniquement</em> vers le serveur IIS</strong> (sur le port du site, rien d’autre. C’est-à-dire <em>tout</em> passe par HTTP (ou HTTPS).)</p>
</li>
<li>
<p>peut traverser n’importe quel proxy supportant les <em>HTTP Keep-Alive</em></p>
</li>
<li>
<p>vous pourriez utiliser TLS/SSL pour contourner les autres</p>
</li>
<li>
<p>nécessite <strong>plusieurs allers-retours</strong> pour s’authentifier, avec de <strong>petits paquets</strong></p>
</li>
<li>
<p>(modèle de journalisation : <strong>401.2, 401.1, 200</strong> avec nom d’utilisateur)</p>
</li>
<li>
<p><strong>ne peut pas être utilisé dans les scénarios nécessitant une authentification à double saut</strong></p>
</li>
<li>
<p>c’est-à-dire que les identifiants de l’utilisateur doivent être transmis à un service sur un autre ordinateur</p>
</li>
<li>
<p>prend en charge les anciens clients (< Win2000)</p>
</li>
<li>
<p>est susceptible aux divergences de niveau d’authentification LM (<a href="https://technet.microsoft.com/en-us/library/cc960646.aspx"><code>lmcompatibilitylevel</code></a> incompatibles)</p>
</li>
<li>
<p>est utilisé comme repli par le package Negotiate si Kerberos échoue.</p>
</li>
<li>
<p>(<strong>pas</strong> « si l’accès est <em>refusé</em> avec Kerberos », Kerberos doit <em>échouer</em> pour que NTLM soit utilisé – généralement cela ressemble à l’impossibilité d’obtenir un ticket. Si le client obtient un ticket et qu’il n’est pas parfait, cela ne provoque pas de repli.)</p>
</li>
</ul>
<h2><a name="p-19718-kerberos-2" class="anchor" href="#p-19718-kerberos-2" aria-label="Heading link"></a>Kerberos</h2>
<ul>
<li></li>
</ul>
<p>fonctionne <strong><em>uniquement</em> avec les clients actuellement joints au domaine</strong></p>
<ul>
<li>
<p>nécessite une connectivité client vers un <strong>DC AD</strong> (tcp/udp 88) <strong>ET le serveur</strong> (les tickets sont récupérés par le client depuis le DC via le port Kerberos, puis fournis au serveur via HTTP)</p>
</li>
<li></li>
</ul>
<p><strong>pourrait</strong> traverser un proxy, mais voir le point sur le DC ci-dessus : <em>vous devez toujours être sur le même réseau qu’un DC actif, tout comme le serveur</em>.</p>
<ul>
<li>
<p>donc <em>en théorie</em>, si vous aviez un domaine dans lequel des clients connectés à Internet communiquaient directement avec un DC connecté à Internet, c’est réalisable. Mais <em>ne faites pas cela</em> sauf si vous le saviez déjà.</p>
</li>
<li>
<p>Dans les scénarios de proxy inverse (ISA/TMG), le serveur de <a href="https://msdn.microsoft.com/en-us/library/ff650469.aspx">transition de protocole</a> doit être sur ce réseau, pas le client… mais alors le client n’est pas vraiment celui qui effectue la partie Kerberos (nécessairement – pensez à la transition d’authentification par formulaires vers Kerberos).</p>
</li>
<li></li>
</ul>
<p><strong>le ticket a une longue durée de vie</strong> (10h), ce qui signifie <strong>moins de communication avec le DC</strong> pendant la durée de vie du ticket – et pour souligner : cela <em>pourrait économiser des milliers à des millions de requêtes</em> <em>par client</em> pendant cette durée – (<a href="https://blogs.msdn.microsoft.com/benjaminperkins/2011/10/31/kerberos-authpersistnonntlm-authentication-request-based-vs-session-based-authentication/"><code>AuthPersistNonNTLM</code></a> est toujours d’actualité ; la <a href="https://blogs.msdn.microsoft.com/spatdsg/2007/03/07/kerberos-pac-validation-what-is-it/">validation PAC Kerberos</a> était d’actualité)</p>
<ul>
<li></li>
</ul>
<p>nécessite un <strong>seul aller-retour</strong> pour s’authentifier, mais la <strong>taille de la charge utile d’authentification est relativement importante</strong> (généralement 6-16K) (<strong>401</strong>, {taille du token (encodé)} <strong>200</strong>)</p>
<ul>
<li></li>
</ul>
<p><strong>peut être utilisé avec la délégation <em>(“veuillez toujours utiliser la délégation contrainte”)</em> pour permettre les scénarios à double saut</strong> – c’est-à-dire l’authentification Windows de l’utilisateur connecté vers le service suivant</p>
<ul>
<li>
<p>en fait, <em>N sauts</em> – cela s’empile comme des Lego ! Ajoutez autant de sauts que nécessaire…</p>
</li>
<li>
<p>par exemple, pour permettre à <code>UserA</code> d’accéder à IIS, et pour qu’IIS usurpe l’identité de ce même compte utilisateur Windows lorsqu’il accède à un autre ordinateur SQL Server. C’est la « délégation d’authentification ».</p>
</li>
<li>
<p>(<em>Contrainte</em> dans ce contexte signifie « mais pas autre chose », par exemple Exchange ou un autre serveur SQL)</p>
</li>
<li></li>
</ul>
<p>est actuellement le package de sécurité principal pour l’authentification Negotiate</p>
<ul>
<li>
<p>ce qui signifie que les membres du domaine Windows le préfèrent quand ils peuvent l’obtenir</p>
</li>
<li></li>
</ul>
<p>nécessite l’<strong>enregistrement de SPN</strong>, ce qui peut être délicat. <a href="http://blogs.technet.com/b/tristank/archive/2006/05/08/spns-r-fn.aspx">Des règles qui aident</a>.</p>
<ul>
<li></li>
</ul>
<p>nécessite l’utilisation d’un <strong>nom</strong> comme cible, pas d’une adresse IP</p>
<ul>
<li></li>
</ul>
<p>raisons pour lesquelles Kerberos pourrait échouer :</p>
<ul>
<li>
<p>utilisation d’une adresse IP au lieu d’un nom</p>
</li>
<li>
<p>pas de SPN enregistré</p>
</li>
<li>
<p>des SPN en double enregistrés</p>
</li>
<li>
<p>SPN enregistré sur le mauvais compte (<code>KRB_ERR_AP_MODIFIED</code>)</p>
</li>
<li>
<p>pas de connectivité DNS / DC côté client</p>
</li>
<li>
<p>paramètre proxy du client / zone Intranet local non utilisée pour le site cible</p>
</li>
</ul>
<p>Tant que nous y sommes :</p>
<h2><a name="p-19718-basic-3" class="anchor" href="#p-19718-basic-3" aria-label="Heading link"></a>Basic</h2>
<ul>
<li>
<p>peut faire du multi-saut. Mais le fait en <strong>exposant directement votre nom d’utilisateur et mot de passe</strong> à l’application web cible</p>
</li>
<li>
<p>qui peut ensuite en faire ce qu’elle veut. <em>N’importe quoi</em>.</p>
</li>
<li>
<p>« Oh, un administrateur de domaine vient d’utiliser mon application ? Et je viens de lire ses courriels ? Puis de réinitialiser son mot de passe ? <em>Oh. Dommage</em> »</p>
</li>
<li>
<p>nécessite une <strong>sécurité de la couche transport</strong> (c’est-à-dire TLS/SSL) pour toute forme de sécurité.</p>
</li>
<li>
<p>et ensuite, <em>voir le problème précédent</em></p>
</li>
<li>
<p>fonctionne avec n’importe quel navigateur</p>
</li>
<li>
<p>(mais <em>voir le premier problème</em>)</p>
</li>
<li>
<p>nécessite un <strong>seul aller-retour</strong> pour s’authentifier (<strong>401</strong>, <strong>200</strong>)</p>
</li>
<li>
<p>peut être utilisé dans des scénarios multi-saut car Windows peut effectuer une connexion interactive avec des identifiants Basic</p>
</li>
<li>
<p>Il peut être nécessaire de configurer le <a href="https://msdn.microsoft.com/en-us/library/aa394189"><code>LogonType</code></a> pour accomplir cela (je crois que la valeur par défaut a changé vers network cleartext entre 2000 et 2003, mais je me trompe peut-être)</p>
</li>
<li>
<p>mais <em>encore une fois</em>, <em>voir le premier problème</em>.</p>
</li>
<li>
<p>Si vous avez l’impression que le <em>premier problème</em> est vraiment, vraiment important ? Il l’est.</p>
</li>
</ul>
<p><strong>En résumé :</strong></p>
<p>Kerberos peut être délicat à configurer, mais il existe de nombreux guides (<a href="http://blogs.technet.com/b/tristank/archive/2006/05/08/spns-r-fn.aspx">le mien</a>) qui tentent de simplifier le processus, et les outils se sont <em>considérablement</em> améliorés de 2003 à 2008 (<code>SetSPN</code> peut rechercher les doublons, ce qui est le problème le plus courant ; <a href="http://blogs.technet.com/b/tristank/archive/2011/10/10/psa-you-really-need-to-update-your-kerberos-setup-documentation.aspx">utilisez <code>SETSPN -S</code></a> chaque fois que vous voyez un guide utilisant -A, et la vie sera plus agréable).</p>
<p>La délégation contrainte vaut à elle seule le prix d’admission.</p>