2009-10-20 6 views
0

J'ai une application web qui résidera sur un serveur de production où je veux journaliser de l'utilisateur dans le nom de l'ordinateur, versComment utiliser WindowsIdentity.Impersonate pour obtenir la connexion de l'utilisateur, plutôt que le compte ASPNET

DOMAINNAME/USERNAME

Beaucoup de gens me l'ont dit que je dois utiliser Impersonation/délégation afin d'obtenir, mais aucun détail au-delà qui ont été fournis. À l'origine, mes tests utilisés:

Response.Write("HttpContext: " & HttpContext.Current.User.Identity.Name & " \n") 
Response.Write("Windows Identity: " & WindowsIdentity.GetCurrent.Name & " \n") 
Response.Write("Thread: " & Thread.CurrentPrincipal.Identity.Name & " \n") 
Response.Write(Request.ServerVariables("LOGON_USER")) 
Response.Write(User.Identity.Name) 

Ce qui donne des résultats valides sur mon serveur cassini local, mais pas lors de la publication. L'ajout de la ligne suivante:

Dim ctx As WindowsImpersonationContext = WindowsIdentity.Impersonate(IntPtr.Zero) 

change le WindowsIdentity à

SERVERNAME \ ASPNET

Cependant, je souhaite le nom d'utilisateur de l'utilisateur actuel (pas du serveur). Comment puis-je manipuler la classe d'usurpation d'identité pour me donner ceci?

EDIT: La solution fournie, dans les commentaires par Heinzi, semble être correcte. Cependant, je crois que c'est IE6 seulement. La société pour laquelle je travaille peut être en train de passer à IE8 dans un proche avenir et je souhaite assurer la fonctionnalité à travers IE 6/7/8 à tout le moins. Est-ce possible?

+0

Vous avez configuré IIS pour l'authentification intégrée, n'est-ce pas? – PhilPursglove

+0

J'ai essayé d'utiliser l'authentification intégrée sur mon localhost/project ..., mais cela m'a incité à saisir mon nom d'utilisateur et mon mot de passe à chaque fois. Comme je travaille dans un environnement d'entreprise, je n'ai pas directement accès aux paramètres IIS de la boîte de production. Si je suis sûr que la commutation de ce paramètre fonctionnera, je peux le demander commuté, mais cela n'a pas semblé résoudre quoi que ce soit sur mon localhost. – Mark

+0

À propos de localhost: Si vous êtes invité à indiquer un nom d'utilisateur et un mot de passe, il est possible que votre Internet Explorer ne soit pas configuré pour transmettre vos informations d'identification Windows. Assurez-vous que vous êtes dans la zone "Intranet" (regardez dans le coin inférieur droit de la barre d'état). – Heinzi

Répondre

1

Vous devez

  • activer l'authentification Windows intégrée à son tour IIS,
  • off utilisateurs anonymes soit dans IIS ou dans votre fichier web.config (section <authorization>),
  • ajouter <identity impersonate="true" /> dans le <system.web> section de votre web.config.

EDIT: This question montre les parties pertinentes du web.config.

Questions connexes