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.
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.
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
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:
Gehen Sie zu IIS → Sites → Ihre Site → Authentifizierung
Überprüfen Sie nun, ob Anonymer Zugriff Deaktiviert ist und Windows-Authentifizierung Aktiviert ist.
Nun sollte System.Web.HttpContext.Current.User.Identity.Name
so etwas zurückgeben:
domain\username
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;
}
}
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.
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;
Ich bin in der gleichen Ausgabe gelaufen.
Das hat bei mir funktioniert:
Einrichten der Eigenschaften der Windows-Authentifizierung in IIS
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);