Je sais qu'il y a des milliers de rapports de personnes ayant du mal à faire fonctionner l'authentification Windows intégrée avec IIS, mais ils semblent tous conduire à des pages Web qui ne s'appliquent pas ou à des solutions que j'ai déjà essayées. J'ai déjà déployé des dizaines de sites comme celui-ci auparavant, donc soit il se passe quelque chose de bizarre avec le serveur/la configuration, soit je regarde cela depuis trop longtemps et je ne vois pas l'évidence.
Autrement dit, tout fonctionne parfaitement sur ma machine locale, mais tombe en panne sur le serveur de production, qui pour autant que je sache a la exactement la même configuration.
Sur la machine locale:
Sur la machine distante:
Enfin, j'ai essayé d'activer FREB pour les erreurs 401.2 et les résultats ne semblent rien me dire d'utile, je ne vois que l'avertissement suivant:
MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName IIS Web Core
Notification 2
HttpStatus 401
HttpReason non autorisé
HttpSubStatus 2
ErrorCode 2147942405
ConfigExceptionInfo
Notification AUTHENTICATE_REQUEST
ErrorCode L'accès est refusé. (0x80070005)
... cela semble simplement me dire ce que je sais déjà (que c'est simplement rejeter la demande au lieu de négocier les informations d'identification).
La trace indique que le module WindowsAuthentication est correctement chargé car il existe un NOTIFY_MODULE_START
ligne avec ModuleName
= WindowsAuthentication
(et divers autres événements de suivi ASP.NET - [un] heureusement, aucune erreur ou avertissement intéressant ici).
Quelqu'un peut-il me dire ce qui pourrait me manquer ici?
Mise à jour rapide:
Je suis un peu mal à l'aise d'envoyer un vidage Wireshark complet car cela révélerait des adresses IP, des URL et d'autres choses, mais j'ai fait une comparaison côte à côte des réponses HTTP de localhost et du serveur distant dans Fiddler, et cela semble assez auto - quel que soit le problème:
Localhost:
HTTP/1.1 401 Non autorisé Contrôle du cache: privé Type de contenu: texte/html; charset = utf-8 Serveur: Microsoft-IIS/7.5 WWW-Authenticate: Négocier WWW-Authenticate: NTLM X-Powered-By: ASP. NET Date: sam. 17 déc. 2011 23:42:34 GMT Contenu-Longueur: 6399 Proxy-Support: Session-Based-Authentication
Télécommande:
HTTP/1.1 401 Non autorisé Type de contenu: text/html Serveur: Microsoft-IIS/7.5 X-Powered-By: ASP.NET Date: sam., 17 déc. 2011 23:43:13 GMT Longueur du contenu: 1293
Mis à part quelques différences apparemment sans conséquence comme le contrôle du cache, la principale différence est que le serveur distant n'envoie pas les en-têtes WWW-Authenticate au client.
Donc, je suppose que cela réduit la question à: Pourquoi IIS n'envoie pas les en-têtes WWW-Authenticate lorsque l'authentification Windows semble être installée, chargée et exclusivement activée?
Problème résolu. J'ai finalement décidé de comparer côte à côte la liste des modules et il en manquait un. Il s'avère qu'il existe deux modules d'authentification Windows:
Sur le serveur, le module managé WindowsAuthentication
était là, mais pas le WindowsAuthenticationModule
natif mis en évidence ci-dessus. La raison pour laquelle il a été configuré de cette façon est une supposition, mais apparemment, si le module natif n'est pas chargé, le module géré se chargera joyeusement et échouera silencieusement.
Donc, pour tous les futurs lecteurs qui rencontrent ce problème, assurez-vous d'avoir les deux modules chargés , car IIS ( ne vous avertira pas si l'un d'eux est manquant.
Nous avons constaté que cela ne résolvait pas nécessairement le problème pour les développeurs travaillant localement sur des sites ASP.NET fonctionnant sous l'authentification Windows. Nous avons trouvé un hack de registre qui désactive la vérification de bouclage; cela l'a corrigé: -
clé de Registre - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
Créez un DWORD avec la valeur 1 appelée "DisableLoopbackCheck"
Vous devrez redémarrer la machine pour que le paramètre prenne effet