2016-09-01 9 views
1

Ich erstelle eine Intranetsite, die die Windows-Authentifizierung verwendet, jedoch Autorisierungsansprüche mithilfe von Entity Framework speichert. Es gibt keine Benutzeranmeldung. Wenn der Browser geschlossen (Cookie gelöscht) und die Anwendung neu gestartet wird (CNTRL F5), überprüft der Home/Index-Controller, dass die Benutzer WindowsIdentity registriert ist und soll den Benutzer anmelden.ASP.NET CORE SignInAsync Erfordert Browseraktualisierung

public async Task<IActionResult> Index() 
    { 
     string userWin = WindowsIdentity.GetCurrent().Name.Split('\\')[1]; 
     var user = await _userManager.FindByNameAsync(userWin); 
     if (user != null) 
     { 
      await _signInManager.SignInAsync(user, isPersistent: false); 
      string userHTTP = HttpContext.User.Identity.Name; 
      ViewData["Message"] = $"Registered User: {user} and HTTPUser: {userHTTP} is registered for this site"; 
     } 
     else 
      ViewData["Message"] = "Please contact admin to register for this website"; 

     return View(); 
    } 

Das erste Mal, das ausgeführt wird, ist userHTTP null und Ansicht html erfordern Benutzer-Anmelde nicht ausgeführt. Wenn der Browser aktualisiert wird, ist alles in Ordnung. Warum erfordert die Anmeldung und der HTTPContext eine Aktualisierung?

Antwort

1

Dieses Verhalten ist "von Entwurf". Aus der Dokumentation: ASP.NET Core bietet Cookie-Middleware, die einen Benutzerprinzipal in ein verschlüsseltes Cookie serialisiert und dann bei nachfolgenden Anforderungen das Cookie validiert, den Prinzipal neu erstellt und der Eigenschaft User unter HttpContext zuweist. Da es sich um eine Intranetsite mit Windows-Authentifizierung handelt, erhalten von einer Site registrierte Benutzer eine Anmeldesicht ohne Login-Umleitung. Die Index-Funktion wurde auf sich selbst umgeleitet, um eine nachfolgende Anfrage zu simulieren:

Ich bin neu zu all dem. Wenn nicht empfohlen, fügen Sie bitte einen Kommentar hinzu.