webentwicklung-frage-antwort-db.com.de

Wie bekomme ich einen Benutzernamen mit der Windows-Authentifizierung in asp.net?

Ich möchte den Benutzernamen mithilfe der Windows-Authentifizierung abrufen

Eigentlich habe ich "Als anderer Benutzer anmelden" implementiert. Wenn Sie auf diese Schaltfläche klicken, wird die Windows-Sicherheit dort angezeigt, wo wir Anmeldeinformationen angeben können.

Wenn ich in dieser Zeit einen anderen Berechtigungsnachweis gebe, wird nur der aktuelle Benutzername verwendet. Wie kann der angegebene Berechtigungsnachweis aus der Windows-Sicherheit abgerufen werden?

Host-Anwendung in IIS, anonyme Authentifizierung wurde deaktiviert und Windows-Authentifizierung wurde aktiviert.

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

Hier bekomme ich immer den voreingestellten Benutzernamen

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

Irgendwelche Ideen? Danke im Voraus

14
user2148679

Sie können das Objekt WindowsIdentity des Benutzers unter Windows-Authentifizierung abrufen, indem Sie:

WindowsIdentity identity = HttpContext.Current.Request.LogonUserIdentity;

und dann können Sie die Informationen über den Benutzer wie Identität.Name erhalten.

Bitte beachten Sie, dass Sie für diesen Code HttpContext benötigen.

26
slepox

Dies sind die verschiedenen Variablen, auf die Sie zugreifen können, und deren Werte, abhängig von der IIS -Konfiguration .

Szenario 1: Anonyme Authentifizierung in IIS mit deaktiviertem Identitätswechsel.

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

Szenario 2: Windows-Authentifizierung in IIS, Identitätswechsel deaktiviert.

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

Szenario 3: Anonyme Authentifizierung in IIS, Identitätswechsel bei

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 

Szenario 4: Windows-Authentifizierung in IIS, Identitätswechsel auf

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

Legende
SERVER1\ASPNET: Identität des laufenden Prozesses auf dem Server.
SERVER1\IUSR_SERVER1: Anonymer Gastbenutzer, der in IIS definiert ist.
MYDOMAIN\USER1: Der Benutzer des Remote-Clients.

Quelle

7

Das sollte funktionieren:

User.Identity.Name

Identity gibt eine IPrincipal zurück

Hier ist der Link zur Microsoft Dokumentation .

4
David Brossard

Es hängt von der Konfiguration der Anwendung sowie von IIS ab, wie dieser Herr im untenstehenden Link zu Recht erklärt hat. Bitte lesen Sie seinen Artikel unten

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

2
Kaushik Ghosh

Benutzername erhalten Sie so:

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

Ich denke, aufgrund des folgenden Codes erhalten Sie keine neuen Zugangsdaten

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

Sie können die benutzerdefinierte Anmeldeseite ausprobieren.

0