2010-01-25 2 views
8

J'ai une application intranet asp.net site mvc. Y at-il de toute façon pour capturer la connexion Windows NT de l'utilisateur sans avoir un système de connexion complet sur le site. Je ne veux pas permission mais je voudrais faire une connexion sur le serveur pour suivre les demandes, etc. .capture windows nom d'utilisateur dans asp.net demande mvc

Répondre

12

Vous pouvez utiliser HttpContext.Current.User.Identity.Name si vous configurez le site pour utiliser Windows Authentication. De nombreux navigateurs transmettent le nom d'utilisateur de manière transparente.

+0

il semble avec firefox, il invite pour un nom d'utilisateur/pwd même si IE ne semble pas l'exiger. . des idées sur pourquoi cela se produit – leora

+0

Dan Diplo - des idées? – leora

+0

FireFox, par défaut, ne transmet pas le nom d'utilisateur. Cependant, il peut être fait pour travailler - voir http://markmonica.com/2007/11/20/firefox-and-integrated-windows-authentication/ –

0

Si vous définissez IIS pour utiliser l'authentification Windows et que le site se trouve dans la zone Intranet pour vos clients, les connexions se produiront automatiquement sans aucune invite.

1

Sur quelle version de Windows cette application mvc s'exécute-t-elle?

Vous pouvez essayer ce qui suit:

  • Utilisez IIS Manager pour désactiver l'accès anonyme au site, et faire digest vous et/ou est activé l'authentification Windows.
  • Modifiez le fichier web.config de l'application mvc pour utiliser l'authentification Windows
  • Accédez au nom de connexion dans le contrôleur à l'aide de User.Identity.Name.

Cela vous aiderait-il?

1

Aller au fichier web.config de votre application (assurez-vous qu'il est le principal, pas le web.config sous Vues), remarque sur <authentication mode="Forms"> si vous le voyez, puis ajouter des lignes comme ceci:

<authentication mode="Windows"/> 
<identity impersonate="true"/> 
<authorization> 
    <allow roles="DOMAIN\PersonnelGroup" /> 
    <allow users="DOMAIN\jdoe"/> 
    <deny users="*"/> 
</authorization> 

Vous n'avez pas besoin d'inclure la section <authorization>, mais c'est utile si vous souhaitez autoriser l'accès à certains groupes et utilisateurs, et refuser tout le monde. Lorsque vous utilisez IE, les informations d'identification sont transmises automatiquement. Vous pouvez tester en imprimant le nom d'utilisateur dans votre vue:

@HttpContext.Current.User.Identity.Name 

Si vous ouvrez votre site en utilisant Firefox ou tout autre navigateur autre IE, il vous demandera le nom d'utilisateur et mot de passe, car il est passe pas automatiquement le long des lettres de créance (bien que vous puissiez apparemment faire passer les identifiants à Firefox, comme Dan Diplo le mentionne plus haut). Si vous voulez transmettre ces informations d'identification à un autre serveur, tel qu'un SQL Server, cela devient plus difficile, car vous avez un problème de double saut. La seule solution de contournement que je connaisse est d'héberger IIS et SqlServer sur le même serveur, ou d'avoir un identifiant pour votre intranet afin que vous ayez le nom d'utilisateur et le mot de passe à transmettre à SQLServer.

1

var s = HttpContext.User.Identity.Name;

Questions connexes