web-dev-qa-db-fra.com

Comment obtenir le nom d'utilisateur Windows quand identité impersonate = "true" dans asp.net?

Je crée une application intranet asp.net mvc à laquelle tous les membres de l'entreprise devraient avoir accès. Je dois utiliser le site Web imité pour accéder à une base de données, etc., mais je veux savoir qui est chaque utilisateur.

Quand je regarde Page.User.Identity.Name, il est vide. Est-il possible d’obtenir le nom de compte Windows de l’utilisateur même si le site Web est imité?

Edit: Voici un peu plus d’informations. J'ai un site dans IIS 6 en cours d'exécution avec l'accès anonyme activé. Le site s'exécute sous un compte système ayant accès à la base de données (car tous les employés n'ont pas accès à la base de données).

Mon web.config a <authentication mode="Windows" /> et <identity impersonate="true"/>

Mon objectif est que les utilisateurs ne soient pas obligés de se connecter - le fait qu'ils soient connectés à notre réseau (et le fait que le site ne se trouve pas sur une adresse IP externe) constitue une authentification suffisante. Je voudrais juste savoir qui est l'utilisateur pour suivre les modifications apportées, etc.

42
MrDustpan

Avec <authentication mode="Windows"/> dans votre application et l'accès anonyme activé dans IIS, vous verrez les résultats suivants:

System.Environment.UserName: Computer Name
Page.User.Identity.Name: Blank
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name 

Avec <authentication mode="Windows"/> dans votre application, "Accès anonyme" désactivé et uniquement "Authentification intégrée de Windows" dans IIS, vous verrez les résultats suivants:

System.Environment.UserName: ASPNET (user account used to run ASP.NET service)
Page.User.Identity.Name: Domain\ Windows Account Name 
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name\ASPNET

Avec <authentication mode="Windows"/> et <identity impersonate ="true"/> dans votre application, et ‘Accès anonyme 'désactivé et uniquement‘ Authentification Windows intégrée ’dans IIS, vous verrez les résultats suivants:

System.Environment.UserName: Windows Account Name 
Page.User.Identity.Name: Domain\ Windows Account Name 
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Domain\ Windows Account Name
114
gokul

essaye ça

Principal.WindowsIdentity.GetCurrent.Name

Il devrait retourner une chaîne avec le nom de connexion de l'utilisateur

4
Gavin

À moins que cette fonctionnalité ait changé dans le cadre de MVC, et je ne pense pas que ce soit le cas, Page.User.Identity.Name devrait toujours fonctionner. On dirait que votre site est configuré pour autoriser l'authentification anonyme. Si c'est le cas, essayez de le désactiver.

1
Ryan

Je voulais juste publier mon correctif, car personne d'autre n'avait rien dit à ce sujet. 

J'avais le même problème lorsque j'ai publié le site sur le serveur, mais pas sur mon site local. Tous les réglages étaient les mêmes. Cependant, dans IIS, le "site Web par défaut" n'avait jamais été désactivé. Il exécutait et interceptait le trafic, même si aucun site ne lui était associé. L'authentification anonyme était activée par défaut, mais désactivée sur mon site web fonctionnant sous le port 80. Peu importait que mon site l'ait désactivé ... puisque la valeur par défaut était activée, elle était activée pour tout le trafic mettre en communication 80.

La désactivation du site Web par défaut a résolu le problème. Changer également le port à 8080 fonctionne.

J'espère que ça aidera quelqu'un.

0
Kelly R