5

Dans IIS j'ai:problème d'authentification intégré IE/IIS

http://myserver/myapplication
http://myserver/reports

L'application des rapports rapporte des services en fait qui utilise l'authentification Windows. myapplication est une application asp.net qui utilise l'authentification par formulaire.

Le serveur est en dehors du domaine de la société. Si j'accède d'abord aux rapports et que je tape l'utilisateur et le mot de passe (informations d'identification locales créées sur le serveur) lorsque je suis invité, je peux accéder à la page des rapports, sans problème. Si alors je vais directement à la page de connexion de mon application et essaye de me connecter, la page de connexion se rafraîchit sans rien faire. Cela arrive toujours dans IE 6. Dans IE 7, il arrive par intermittence. Cela n'arrive pas dans Firefox ou si Fiddler fonctionne en arrière-plan, ce qui semble résoudre le problème à la volée.

J'ai utilisé wireshark pour voir ce qui se passe et j'ai trouvé que IE 6 envoie le jeton d'authentification Windows obtenu à partir de l'application de rapports à myapp. C'était la seule différence entre IE et Firefox. IIS semble paniquer et simplement interpréter mon POST à ​​la page de connexion comme un GET et retour.

Si j'ajoute l'authentification Windows à myapplication dans IIS, tout semble fonctionner correctement avec n'importe quel navigateur.

Pourquoi cela se produit-il? Un bug dans IE ou ai-je oublié quelque chose?

Répondre

13

C'est un peu un bug dans IE, et un problème dans la conception de l'authentification NTLM/Negotiate (alias intégré) via HTTP. NTLM/Negotiate sont des protocoles d'authentification orientés connexion, pour lesquels HTTP n'a pas vraiment été conçu. Par conséquent, lorsque vous avez besoin de ce mécanisme d'authentification pour une page sur votre serveur, IE supposera généralement que les autres pages sur le serveur ont la même exigence.

En outre, pour des raisons de performance et de sécurité, si IE attend un Negotiate/défi NTLM pour une requête POST donné, il va d'abord envoyer un 0 octet POST, attendant que le serveur retourne un HTTP/401 défi auquel il va s'authentifier et envoyer correctement le corps du POST.

Cependant, dans votre cas, le dossier qui ne nécessite pas l'authentification intégrée reçoit le POST 0 octet et dit "Hrm, bizarre, un message de 0 octet. Ok, HTTP/200, voici la page comme si vous aviez utilisé GET. "

Comme IE n'obtient jamais le challenge 401 attendu, il n'envoie jamais le corps POST.

(Fiddler peut vous perturber un peu en raison de la façon dont la réutilisation de la connexion HTTP fonctionne). La solution consiste à s'assurer que si vous utilisez Integrated sur l'hôte, utilisez-le partout.

+0

merci Eric, quelle serait la solution pour cela? IE devrait envoyer le message POST entier comme Firefox fait, non? Je suppose que IE 8 fonctionne, ne l'ai pas encore testé. –

Questions connexes