Wie der aktuelle Windows-Benutzer mit ASP.NET Core RC2 MVC6 und IIS7
Ich habe eine intranet-Seite gebaut, in MVC6 mit ASP.NET Core RC2. Ich möchte den Windows-Benutzernamen der person, die Zugriff auf die intranet-Seite.
Also, wenn Jim geht, um die intranet-site möchte ich die site zu erhalten "Domain\Jim", während, wenn Anne geht auf der intranet-site möchte ich die site zu erhalten "Domäne\Anne".
Nur die Windows-Authentifizierung aktiviert ist auf meinem IIS server, die Anonyme Authentifizierung deaktiviert ist.
Meine Website setzen die Verwendung von Windows-Authentifizierung, und deaktivieren Sie die anonyme Authentifizierung.
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
</authorization>
</system.web>
Durch Debuggen kann ich verwenden System.Security.Principal.WindowsIdentity.GetCurrent().Name
, aber natürlich gibt "IIS APPPOOL\SiteName" auf dem IIS-server.
Fand ich viele Beispiele aus der älteren version ASP.NET mit HttpContext, und ich habe versucht, die Injektion, die in meinem controller mit dem folgenden aber Benutzername endet null.
//Startup.cs
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
//HomeController.cs
public HomeController(IHttpContextAccessor _accessor)
{
string userName = _accessor.HttpContext.User.Identity.Name;
}
Was ist der richtige Weg, um pass den Windows-Benutzernamen, um eine intranet-site in ASP.NET Core RC2 MVC6?
- Haben Sie deaktiviert den anonymen Zugriff auf Ihre site?
- Ja. Ich habe es deaktiviert mit den folgenden innen - <system.web>. <Berechtigung> <deny users="?"> </authorization> habe ich aktualisiert meine Frage mit dem <system.web - > block.
- Haben Sie eine Authentifizierungs-middleware registriert?
- weist Ihre Website einen login-Bildschirm..? auch eine google-Suche es gibt Informationen heraus dort auf, wie dies zu tun. hier ist ein freeB stackoverflow.com/questions/30701006/...
- Kein login-Bildschirm benötigt mit windows-auth
- Vielleicht ist diese config wird helfen stackoverflow.com/a/29500929/1663001
- Zuerst ein upgrade auf RTM. Zweitens erlernen Sie, was ist ASP.NET Kern, der in docs.asp.net die Einstellungen, Die Sie setzen im web.config nutzlos sind, wie Sie sind, nicht für ASP.NET Core überhaupt.
- Ich habe Gegoogelt, diese ausgiebig @MethodMan, aber leider sind die meisten Antworten sind für ältere Versionen von ASP.NET, nicht der Kern. Das Ergebnis ist, dass die meisten Lösungen, einschließlich die, die Sie verknüpft sind, nicht in ASP.NET Core. Es wird weder der Zugriff auf das System.Web.Aktuellen Pfad, noch ist es ein Benutzer.GetUserId () - Methode.
- Ich habe versucht, die config führt aber zu einem 500 internal server error. Danke aber.
- Bitte verwenden Sie nicht MVC6 tags mehr. Es ist für eine zukünftige version von ASP.NET MVC basiert auf der alten webstack (MVC5). ASP.NET Kern ist eine komplett neue und inkompatible portable-version basiert .NET Core. asp.net-core-mvc und/oder asp.net-core - tags statt, und Ihre Frage ist wahrscheinlich eher gefunden werden von Leuten, die Ihnen helfen können, mit dem Problem
- Hat die jemand hat kein Glück mit asp.net Kern-und IIS zu können, Lesen Sie das Thema? Ich habe versucht, eine Menge von Optionen, die ich Lesen, aber nicht bekommen, um zu arbeiten.
- Ich kann nicht ankommen es zu wirken, wenn Sie veröffentlicht IIS entweder. Ich hoffe jemand kann bekommen diese auch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für alle anderen Benutzer mithilfe der Windows-Authentifizierung im Intranet app, die einfach sein will, in der Lage, zum abrufen von Informationen über einen user, ist es einfacher, dass Sie vielleicht denken.
In Ihrem controller, dieser Linie greifen, werden Sie den Benutzernamen des aktuellen Benutzers in der DOMÄNE\Benutzername form.
Verbrachte ich einige Zeit Blick durch die anderen Antworten, bevor Sie realisieren, dass die meisten von Ihnen ausgegangen war ich von der Umsetzung Individueller Konten werden authentifiziert AD, nicht aus dem Kontrollkästchen Windows-Authentifizierung.
Vielleicht jemand helfen, der noch auf der Suche nach. Pro Dokumentation von MS https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-context?view=aspnetcore-2.2 , fügen Sie die HttpContextAccessor in ConfigureServices Methode (startup.cs)
Übergeben Sie dieses httpcontextaccessor in die Steuerung und den Zugriff der Benutzer eingeloggt ist.
Folgte ich dieser und ich war in der Lage, den angemeldeten Windows-Authentifizierten Benutzer auch nach der Bereitstellung des Kern website zu IIS.
Hier sind die code-Schnipsel
Starten.cs (unter ConfigureServices-Methode) fügen Sie die Zeile
Dann in einer controller-Datei, fügen Sie die folgende Stück code-Zeilen. Der code unten ist ein Beispiel.
Mit
var userId = this.User.Identity.Name;
für mich gearbeitet. Meine app läuft in einem intranet, und ich war auf der Suche zu tun ist, erhalten die Benutzer, die die login-Id von Windows. Ich brauchte nicht zu speichern, die die Informationen der Benutzer, wie bereits in Active Directory gespeichert.ServiceSecurityContext.Current?.PrimaryIdentity