wake-up-neo.com

So erhalten Sie den aktuellen Windows-Benutzer mit ASP.NET Core RC2 MVC6 und IIS7

Ich habe eine Intranetsite, die in MVC6 mit ASP.NET Core RC2 erstellt wurde. Ich möchte den Windows-Benutzernamen der Person erhalten, die auf die Intranetseite zugreift.

Wenn Jim also auf die Intranetsite geht, möchte ich, dass die Site "Domain\Jim" erhält, und wenn Anne zur Intranetsite geht, möchte ich, dass die Site "Domain\Anne" erhält.

Auf meinem Server IIS ist nur die Windows-Authentifizierung aktiviert. Die anonyme Authentifizierung ist deaktiviert.

Meine Website verwendet die Windows-Authentifizierung und deaktiviert die anonyme Authentifizierung.

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

Durch Debug kann ich System.Security.Principal.WindowsIdentity.GetCurrent().Name verwenden, aber das gibt natürlich "IIS APPPOOL\SiteName" auf dem IIS Server zurück.

Ich habe viele Beispiele aus einer älteren ASP.NET-Version gefunden, die HttpContext verwendet hat, und ich habe versucht, dies mit folgendem in meinen Controller zu injizieren, aber userName endet mit null.

//Startup.cs
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

//HomeController.cs
public HomeController(IHttpContextAccessor _accessor)
{
    string userName = _accessor.HttpContext.User.Identity.Name;
}

Wie kann ich den Windows-Benutzernamen an eine Intranetsite in ASP.NET Core RC2 MVC6 übergeben?

8
Kyle

Für alle anderen Benutzer, die die Windows-Authentifizierung in einer Intranet-App verwenden und nur Informationen zu einem Benutzer abrufen möchten, ist es einfacher, als Sie denken. 

In Ihrem Controller erhält diese Zeile den Benutzernamen des aktuellen Benutzers in der Form DOMÄNE\Benutzername.

var userId = this.User.Identity.Name;

Ich verbrachte einige Zeit damit, die anderen Antworten durchzublättern, bevor mir klar wurde, dass die meisten davon ausgegangen waren, dass ich einzelne Konten für die Authentifizierung bei AD implementiere, nicht die Standard-Windows-Authentifizierung. 

5

ServiceSecurityContext.Current? .PrimaryIdentity

0

Könnte jemandem helfen, der noch sucht. Per Dokumentation aus MS https://docs.Microsoft.com/de-de/aspnet/core/fundamentals/http-context?view=aspnetcore-2.2 fügen Sie die HttpContextAccessor-Methode in der ConfigureServices-Methode (startup.cs) hinzu. .____.] Übergeben Sie diesen httpcontextaccessor an den Controller und greifen Sie auf den angemeldeten Benutzer zu.

Ich folgte dem und konnte den angemeldeten Windows-authentifizierten Benutzer auch nach der Bereitstellung der Core-Website für IIS abrufen.

Hier sind die Codeausschnitte

Fügen Sie in Startup.cs (unter ConfigureServices-Methode) die Zeile hinzu

services.AddHttpContextAccessor();

Fügen Sie dann in Ihrer Controller-Datei die folgenden Codezeilen hinzu. Der folgende Code ist ein Beispiel.

public YourController : Controller
{
  private readonly IHttpContextAccessor _httpContextAccessor;
  private readonly string _user;
  public YourController(IHttpContextAccessor httpContextAccessor)
  {
    _httpContextAccessor = httpContextAccessor;
    _user = _httpContextAccessor.HttpContext.User.Identity.Name;
  }
}
0
Jabez

Mit var userId = this.User.Identity.Name; arbeitete ich für mich. Meine App läuft in einem Intranet und ich habe lediglich die Login-ID des Benutzers von Windows abgerufen. Ich musste die Informationen des Benutzers nicht speichern, da diese bereits in Active Directory gespeichert werden.

0
Delroy