2009-06-29 6 views
2

Mise à jourIIS/DirectoryEntry/ASP.NET - Échec de la connexion

Mettre ce en haut parce qu'il est fou :)

Ainsi, certains utilisateurs ont fonctionner, certains ne le font pas. Lorsque j'utilise mon propre compte via IE7 cela ne fonctionne pas (mon code attrape l'exception et retombe simplement en utilisant le nom d'identité au lieu du nom complet AD). Lorsque j'essaie via Chrome, il me demande le nom d'utilisateur et le mot de passe que je fournis, et le nom complet est affiché. Ainsi, le compte d'utilisateur, le code du serveur et les paramètres sont identiques, mais l'utilisation d'un navigateur différent pour envoyer l'authentification le fait fonctionner.

J'ai également effacé tous les cookies de IE7, redémarré, et il n'y avait aucun changement dans le comportement d'IE. Beaucoup d'utilisateurs d'IE7 le font fonctionner correctement.

Mise à jour # 2

connecté à distance dans une autre machine, est allé à la page dans IE7, et il montre mon nom complet. Aucune idée. Je pensais que la session était peut-être en train de mettre en cache quelque chose mais j'ai republié l'application et cela devrait éclaircir la session. Je pensais que peut-être un cookie avait un vieux/mauvais jeton, mais je l'ai effacé et j'ai essayé à nouveau. Quelque part quelque part doit être mis en cache à long terme. Espérons que cela fonctionne.

End Mises à jour

Bonjour,

Je suis un utilisateur nom train de les récupérer pleinement de notre AD dans une application ASP.NET (MVC) en cours d'exécution sur IIS 6.0.

string domainUser = filterContext.HttpContext.User.Identity.Name; 

WindowsIdentity windowsIdentity = filterContext.HttpContext.User.Identity as WindowsIdentity; 

WindowsImpersonationContext impersonationContext = windowsIdentity.Impersonate(); 

DirectoryEntry userEntry = new DirectoryEntry("WinNT://" + domainUser.Replace('\\', '/') + ",User"); 
filterContext.Controller.ViewData["User"] = (string)userEntry.Properties["fullname"].Value; 

La dernière ligne déclenche une exception: « Échec de la connexion: nom d'utilisateur inconnu ou mot de passe incorrect. »

Si je regarde le HttpContext.User.Identity c'est un utilisateur de domaine valide et WindowsIdentity.GetCurrent est emprunté correctement.

Cette exception semble également ne pas être lancée 100% du temps, et elle n'est pas levée si elle est consultée à partir du serveur IIS.

Mon web.config ressemble:

<authentication mode="Windows"/> 
<authorization> 
    <deny users="?"/> 
</authorization> 
<identity impersonate="false"/> 

Ce qui me tracasse est que si je retire la ligne d'emprunt d'identité:

WindowsImpersonationContext impersonationContext = windowsIdentity.Impersonate(); 

Il fonctionne. WindowsIdentity.GetCurrent est NT AUTHORITY \ NETWORK SERVICE qui n'est pas un utilisateur de domaine mais aucune exception n'est levée et le nom complet est extrait de l'AD.

Le dernier bit est que cela semble avoir seulement commencé à se produire avec un nouveau déploiement de l'application (du test au live). Je ne sais pas s'il me manque un paramètre IIS ou quoi, mais le code n'a pas changé. Je sais que j'avais besoin d'usurper l'identité auparavant pour le faire fonctionner, et il semble que je devrais avoir besoin d'usurper l'identité, donc j'hésite à supprimer l'appel d'usurpation d'identité sans savoir complètement ce qui se passe et pourquoi cette erreur est maintenant arrive.

Merci.

Répondre

1

Je suppose que le problème est que le serveur hébergeant votre application ASP.NET n'est pas approuvé pour la délégation. Google pour "confiance pour délégation" pour plus d'informations, ou this MSDN article est un bon point de départ.

+0

Après avoir testé un peu plus, même si je ne suis pas sûr de l'origine du problème, je ne pense pas qu'il puisse être 100% le serveur. J'ai ajouté une mise à jour, mais en gros cela fonctionne pour le même compte, le même serveur, la même machine client, différents navigateurs (un navigateur échoue, un fonctionne). Je suis un peu perplexe. J'ai essayé la suggestion et ai placé le serveur à la confiance pour la délégation, mais les choses ne semblaient pas être fixées (cela a dit, le temps pour la propagation pourrait être plus haut que j'ai attendu). – anonymous

Questions connexes