web-dev-qa-db-fra.com

Comment obtenir un nom d'utilisateur en utilisant l'authentification Windows dans asp.net?

Je veux obtenir le nom d'utilisateur en utilisant l'authentification Windows

En fait, j’ai implémenté "Connexion en tant qu’utilisateur différent", lorsque vous cliquez sur ce bouton, la sécurité de Windows y apparaîtra, nous pourrons vous donner des informations d’identité.

À ce moment-là, si je donne d'autres informations d'identification, il utilise uniquement le nom d'utilisateur actuel… .. Comment obtenir ce nom d'utilisateur d'identification à partir de la sécurité Windows?

L'application hôte dans IIS, puis l'authentification anonyme a été désactivée et l'authentification Windows a été activée.

web.config:

<system.web>
    <compilation debug="true" targetFramework="4.0" />
  <identity impersonate="true"/>
  <authorization>
      <allow users="*"/>
      <deny users="*"/>
  </authorization>
</system.web>
<system.webServer>
    <directoryBrowse enabled="true" />
    <security>
        <authentication>
            <anonymousAuthentication enabled="false" />
            <windowsAuthentication enabled="true" />
        </authentication>
    </security>

.cs

Ici, je reçois toujours le nom d'utilisateur par défaut

string fullName = Request.ServerVariables["LOGON_USER"];

Des idées? Merci d'avance

14
user2148679

Vous pouvez obtenir l'utilisateur WindowsIdentity object sous Authentification Windows en:

WindowsIdentity identity = HttpContext.Current.Request.LogonUserIdentity;

et alors vous pouvez obtenir les informations sur l'utilisateur comme identity.Name.

Veuillez noter que vous devez avoir HttpContext pour ces codes.

26
slepox

Ce sont les différentes variables auxquelles vous avez accès et leurs valeurs, en fonction de la configuration IIS .

Scénario 1: Authentification anonyme dans IIS avec emprunt d'identité désactivé.

HttpContext.Current.Request.LogonUserIdentity.Name    SERVER1\IUSR_SERVER1 
HttpContext.Current.Request.IsAuthenticated           False                    
HttpContext.Current.User.Identity.Name                –                        
System.Environment.UserName                           ASPNET                   
Security.Principal.WindowsIdentity.GetCurrent().Name  SERVER1\ASPNET

Scénario 2: Authentification Windows dans IIS, emprunt d'identité désactivé.

HttpContext.Current.Request.LogonUserIdentity.Name    MYDOMAIN\USER1   
HttpContext.Current.Request.IsAuthenticated           True             
HttpContext.Current.User.Identity.Name                MYDOMAIN\USER1   
System.Environment.UserName                           ASPNET           
Security.Principal.WindowsIdentity.GetCurrent().Name  SERVER1\ASPNET

Scénario 3: Authentification anonyme dans IIS, emprunt d'identité sur

HttpContext.Current.Request.LogonUserIdentity.Name    SERVER1\IUSR_SERVER1 
HttpContext.Current.Request.IsAuthenticated           False                    
HttpContext.Current.User.Identity.Name                –                        
System.Environment.UserName                           IUSR_SERVER1           
Security.Principal.WindowsIdentity.GetCurrent().Name  SERVER1\IUSR_SERVER1 

Scénario 4: Authentification Windows dans IIS, emprunt d'identité sur

HttpContext.Current.Request.LogonUserIdentity.Name    MYDOMAIN\USER1
HttpContext.Current.Request.IsAuthenticated           True          
HttpContext.Current.User.Identity.Name                MYDOMAIN\USER1
System.Environment.UserName                           USER1         
Security.Principal.WindowsIdentity.GetCurrent().Name  MYDOMAIN\USER1

Légende
SERVER1\ASPNET: Identité du processus en cours sur le serveur.
SERVER1\IUSR_SERVER1: Utilisateur invité anonyme défini dans IIS.
MYDOMAIN\USER1: l'utilisateur du client distant.

La source

7

Cela devrait fonctionner:

User.Identity.Name

Identity retourne une IPrincipal

Voici le lien vers Microsoft documentation .

4
David Brossard

Cela dépend de la configuration de l'application ainsi que de IIS, comme ce monsieur l'a justement expliqué dans le lien ci-dessous. S'il vous plaît voir son article ci-dessous

http://richhewlett.com/2011/02/15/getting-a-users-username-in-asp-net/

2
Kaushik Ghosh

Nom d'utilisateur que vous obtenez comme ceci:

var userName = HttpContext.Current.Request.LogonUserIdentity?.Name;
0
Ogglas

Je pense qu'en raison du code ci-dessous, vous n'obtenez pas de nouveau justificatif d'identité

string fullName = Request.ServerVariables["LOGON_USER"];

Vous pouvez essayer page de connexion personnalisée .

0