it-swarm.com.de

Wie erhalte ich das aktuell angemeldete Windows-Konto von einer ASP.NET-Seite?

Ich habe eine ASP.NET 3.5-Anwendung, die die ASP.NET-Formularauthentifizierung verwendet. Ich möchte in der Lage sein, den Windows-Benutzernamen abzufragen, der aktuell am Computer angemeldet ist (NICHT bei der ASP.NET-Anwendung, sondern bei Windows), wenn Daten auf einer Seite bearbeitet werden.

Wenn ich Context.User.Identity.Name.Tostring() verwende, wird der Benutzername in der ASP.NET-Anwendung angemeldet, der Windows-Kontoname ist jedoch erforderlich.

System.Security.Principal.WindowsIdentity.GetCurrent().Name.Tostring()

Es funktioniert auch nur, wenn ich die Website von Visual Studio aus ausführe. Nach der Bereitstellung auf IIS wird jedoch NT AUTHORITY\SYSTEM zurückgegeben.

19
StackTrace

Sie müssen den Authentifizierungsmodus in Ihrer Konfiguration auf Windows setzen und anonyme Benutzer im Berechtigungs-Tag deaktivieren.

13
Zo Has

Um den aktuell angemeldeten Benutzer auf ein Windows-Konto zu bringen, müssen Sie Windows authentication anstelle von Forms authentication verwenden:

System.Security.Principal.WindowsIdentity.GetCurrent (). Name.Tostring () Funktioniert auch nur, wenn ich die Website von Visual Studio aus betreibe, aber nach Bei der Bereitstellung auf IIS wird NT AUTHORITY\SYSTEM zurückgegeben

Es zeigt den aktuellen Benutzer der Anwendung. Wenn Sie Ihre Anwendung auf dem Visual Studio-Webserver hosten, wird Ihr lokales Konto verwendet. Wenn Sie sich jedoch mit unterschiedlichen Anmeldeinformationen bei der Webanwendung anmelden, wird immer Ihr aktuelles Windows-Login angezeigt.

Eine Anwendung, die unter IIS bereitgestellt wird, verwendet in Ihrem Fall das Konto NT AUTHORITY\SYSTEM.

8

Um den aktuell angemeldeten Benutzer bei Windows in C # zu erhalten, verwenden Sie:

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

Ich kämpfte und kämpfte und kämpfte damit. Eines der Dinge ist, dass ich keinen Zugriff auf IIS habe, der gesperrt ist, sodass ich keine Servereinstellungen ändern konnte. Ich musste mit dem gehen, was ich im Code tun konnte. Als ich es recherchierte, sagten viele der Antworten: "setze IIS so". . Nun, das ist großartig, wenn Sie Zugriff auf IIS haben, aber ich habe nicht - ich musste mit dem arbeiten, was ich im Code tun konnte. Also habe ich es so gehandhabt:

In meiner Web-Konfigurationsdatei habe ich die folgenden Codezeilen in die .__ eingefügt. Sektion:

<system.webServer>
<security>
  <authentication>
    <anonymousAuthentication enabled="false" />
    <windowsAuthentication enabled="true" />
  </authentication>
</security>
</system.webServer>

Dann gab es einen Fehler auf meinem lokalen Server, den ich einholen und beheben musste. Ich ging in die Datei "applicationhost.config", die sich unter folgendem Pfad auf meinem Computer befindet (Ihre ist möglicherweise anders):

C:\Benutzer\"Ihr Benutzername"\Eigene Dateien\"IhreIIS-Installation"\config\applicationhost.config

und ich habe folgende Einstellungen in "allow" geändert, die auf "deny" gesetzt wurde:

<section name="anonymousAuthentication" overrideModeDefault="Deny" />

gewechselt zu 

<section name="anonymousAuthentication" overrideModeDefault="Allow" />

und

<section name="windowsAuthentication" overrideModeDefault="Deny" />

zu

<section name="windowsAuthentication" overrideModeDefault="Allow" />

in dem

<sectionGroup name="authentication">

sektion. Bevor ich diesen Fix herausfand, zog ich mir die Haare aus. Ich hoffe das hilft jemandem. Sobald ich den obigen Code in die webconfig-Datei eingepflegt habe, funktionierte er im Intranet. Er gab nur Fehler in meinem local zurück, aber sobald ich den oben genannten in meine localhost.config-Datei eingefügt habe, begann er mit meinem local zu arbeiten auch. Dann habe ich die folgende Variable aufgerufen, um den Namen des angemeldeten Benutzers unter Windows zurückzugeben:

    HttpContext.Current.User.Identity.Name.ToString().Substring((HttpContext.Current.User.Identity.Name.ToString().IndexOf("\\")) + 1);

Prost!

6
dotnetterdev

Ich benutze das:

System.Security.Principal.WindowsPrincipal user;
user = new WindowsPrincipal(this.Request.LogonUserIdentity);
this.Request.LogonUserIdentity.Impersonate();
user_name = user_name.Substring(user_name.LastIndexOf("\\") + 1);
4
kobe
string strName = HttpContext.Current.User.Identity.Name.ToString();

wie Sie wollten, war es richtig, aber Sie müssen zuerst den Webserver einrichten, siehe So erhalten Sie mit Windows NT protokollierten Benutzernamen mit ASP.NET (Erste Schritte zum Einrichten eines Webservers) .

0
Postback

Ich konnte dieses Problem beheben, indem ich die Anweisungen hier in Methode 1 unter folgendem Link befolgte: - https://support.Microsoft.com/en-us/help/896861/you-receive-error-401-1- Wenn Sie eine Web-Site durchsuchen, die die Anwendungen integriert, In Kürze: Deaktivieren Sie alle Authentifizierungsmethoden mit Ausnahme der Windows-Authentifizierung Öffnen Sie regedit unter einem Administratorkonto. Suchen Sie nach HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \. Control\Lsa\MSV1_0, klicken Sie mit der rechten Maustaste auf den Knoten, gehen Sie auf Neu und wählen Sie Multi-String Value. Geben Sie "BackConnectionHostNames" ein und drücken Sie die Eingabetaste. Geben Sie die Website ein, auf der Sie den Zugriff einrichten möchten, und klicken Sie auf OK. Starten Sie IIS neu. Sobald ich fertig war, konnte ich es bekommen der aktuelle Windows-Benutzer, der HttpContext.Current.User.Identity.Name verwendet, WindowsPrincipal (this.Request.LogonUserIdentity) hat mir auch den Windows-Benutzernamen angemeldet .. .. Zur Referenz System.Environment.UserName und System.Security.Principal.WindowsIdentity .GetCurrent (). Name, beide haben dem Benutzer IIS immer noch den Namen gegeben. 

Das hat mich lange gebraucht, um auf den Grund zu gehen. Viel Glück damit. IIS ist ein Albtraum!

0
Glen Quarless

Versuchen Sie es mit der folgenden Codezeile:

string loggedOnUser = string.Empty;
 loggedOnUser = Request.ServerVariables.Get("AUTH_USER");

Wenn Sie die Anwendung von Visual Studio ausführen, erhalten Sie möglicherweise die Werte nicht ... Überprüfen Sie es, nachdem Sie es in IIS bereitgestellt haben.

Um den Benutzernamen zu erhalten, verwenden Sie:

string userName = string.Empty;
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "Your Domain Name"))
{
    UserPrincipal user = new UserPrincipal(pc);
    user = UserPrincipal.FindByIdentity(pc, "User ID Will Come here");
    if (user != null)
    {
        userName = user.GivenName + " " + user.Surname;

    }
    else
    {
        //return string.Empty;
        userName = "User Not Found";
    }
}
0
Rohit Vyas