webentwicklung-frage-antwort-db.com.de

Wie erhalte ich den aktuellen Benutzer, der auf eine ASP.NET-Anwendung zugreift?

Um den aktuell angemeldeten Benutzer am System zu erhalten, verwende ich diesen Code:

string opl = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();

Ich arbeite an einer ASP.NET-Anwendung, bei der ich diese Informationen benötige. Also habe ich meine Anwendung auf einen Server gestellt und den Code oben ausprobiert und bekomme "Network Service" im String opl. Ich muss den aktuellen Benutzer des PCs kennen, der auf meine ASP.NET-Anwendung zugreift.

19
SamekaTV

Wenn Sie eine Mitgliedschaft nutzen, können Sie Folgendes tun: Membership.GetUser()

Ihr Code gibt das Windows-Konto zurück, das mit ASP.NET zugewiesen wurde.

13
Robert

Die schnelle Antwort ist User = System.Web.HttpContext.Current.User

Stellen Sie sicher, dass Ihre web.config das folgende Authentifizierungselement enthält. 

<configuration>
    <system.web>
        <authentication mode="Windows" />
        <authorization>
            <deny users="?"/>
        </authorization>
    </system.web>
</configuration>

Weiterführende Literatur: Rezept: Aktivieren der Windows-Authentifizierung in einer Intranet-ASP.NET-Webanwendung

44
BenCr

Die Verwendung von System.Web.HttpContext.Current.User.Identity.Name sollte funktionieren. Überprüfen Sie die IIS Site-Einstellungen auf dem Server, der Ihre Site hostet, indem Sie folgende Schritte ausführen:

  1. Gehen Sie zu IIS → Sites → Ihre Site → Authentifizierung

    IIS Settings

  2. Überprüfen Sie nun, ob Anonymer Zugriff Deaktiviert ist und Windows-Authentifizierung Aktiviert ist.

    Authentication

  3. Nun sollte System.Web.HttpContext.Current.User.Identity.Name so etwas zurückgeben:

    domain\username

15
Santiago Diaz

Es empfiehlt sich, zuerst die Identity.IsAuthenticated-Eigenschaft zu überprüfen und dann den usr.UserName wie folgt abzurufen:

string userName = string.Empty;

if (System.Web.HttpContext.Current != null && 
    System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
{
    System.Web.Security.MembershipUser usr = Membership.GetUser();
    if (usr != null)
    {  
        userName = usr.UserName;
    }
}
5
Deepak Kothari

Sie können einfach eine Eigenschaft der Seite verwenden. Und das Interessante ist, dass Sie überall in Ihrem Code auf diese Eigenschaft zugreifen können.

Benutze das:

HttpContext.Current.User.Identity.Name

Schau nicht zu weit.

Wenn Sie mit ASP.NET MVC entwickeln, haben Sie den Benutzer lediglich als Eigenschaft der Controller-Klasse . Falls Sie sich bei einigen Modellen, die nach dem aktuellen Benutzer suchen, verirrt haben, versuchen Sie, einen Schritt zurückzutreten und die relevanten Informationen in der Steuerung abzurufen.

Verwenden Sie in der Steuerung einfach:

using Microsoft.AspNet.Identity;

  ...

  var userId = User.Identity.GetUserId();
  ...

mit userId als String.

2
peter_the_oak

Die allgemeine Antwort auf den allgemeinen Konsens scheint ein Kompatibilitätsproblem mit der CORS-Unterstützung zu haben. Um das Attribut HttpContext.Current.User.Identity.Name verwenden zu können, müssen Sie die anonyme Authentifizierung deaktivieren, damit die Windows-Authentifizierung die Informationen zum authentifizierten Benutzer erzwingen kann. Leider bin ich der Meinung, dass Sie die anonyme Authentifizierung aktiviert haben müssen, um die Anforderung von OPTIONS vor dem Flug in einem CORS-Szenario verarbeiten zu können.

Sie können dies umgehen, indem Sie die anonyme Authentifizierung aktiviert lassen und stattdessen das Attribut HttpContext.Current.Request.LogonUserIdentity verwenden. Dadurch werden die authentifizierten Benutzerinformationen zurückgegeben (vorausgesetzt, Sie befinden sich in einem Intranetszenario), auch wenn die anonyme Authentifizierung aktiviert ist. Das Attribut gibt eine WindowsUser-Datenstruktur zurück, und beide sind im Namespace System.Web definiert

        using System.Web;
        WindowsIdentity user;
        user  = HttpContext.Current.Request.LogonUserIdentity;
0
BruceK

Ich bin in der gleichen Ausgabe gelaufen.

Das hat bei mir funktioniert:

Setting up Authentication in IIS Panel

Setting up Properties of Windows Authentication in IIS

Einrichten der Eigenschaften der Windows-Authentifizierung in IIS NTLM has to be the topmost

NTLM muss das oberste sein. Weitere Web.config-Änderungen stellen Sie sicher, dass Sie bereits über Folgendes verfügen, oder fügen Sie Folgendes hinzu, falls diese noch nicht vorhanden sind:

<system.web>

  <authentication mode="Windows" />
  <identity impersonate="true"/>

</system.web>

 <!-- you need the following lines of code to bypass errors, concerning type of Application Pool (integrated pipeline or classic) -->

<system.webServer>
   <validation validateIntegratedModeConfiguration="false"/>
</system.webServer>

Im Folgenden finden Sie eine legitime Erklärung für die beiden Knoten und

nterschied zwischen <system.web> und <system.webServer>?

Und natürlich erhalten Sie den Benutzernamen von

//I am using the following to get the index of the separator "\\" and remove the Domain name from the string
int indexOfSlashChar = HttpContext.Current.User.Identity.Name.IndexOf("\\"); 

loggedInWindowsUserName = HttpContext.Current.User.Identity.Name.Substring(indexOfSlashChar + 1);
0
George