Det finns inte ett enda "Logga ut" -knappkommando i ASP.NET MVC som magiskt hanterar Windows Authentication Logga ut. Windows -autentisering hanteras på operativsystemet och IIS -nivå, inte enbart inom din applikation. Din applikation måste signalera till webbläsaren och IIS för att avsluta den autentiserade sessionen. Här är de vanliga tillvägagångssätten:
1. Former autentisering (enklast, rekommenderas om möjligt):
Om du har * någon * flexibilitet i din installation är den enklaste och renaste lösningen att växla till formulär autentisering . Windows -autentisering är oflexibel och tätt kopplad till serverns användarhantering. Forms autentisering gör att du kan hantera användarkonton inom din applikation och ger en enkel utloggningsmekanism. Sedan kommer en enkel `Formsauthentication.Signout ()` i din kontrollåtgärd att hantera utloggningen.
`` `csharp
[Httppost]
Public ActionResult Logoff ()
{
Formauthentication.signout ();
Return RedirectToAction ("Index", "Home"); // omdirigera till din hemsida
}
`` `
2. Tvinga en ny begäran (Windows Authentication):
Om du * måste * använda Windows-autentisering måste du utlösa en ny begäran som kommer att tvinga en åter- autentisering (eller brist på den). Det finns inget direkt "logout" -kommando; Du förstör i huvudsak sessionskakan:
* omdirigering till en speciell URL: Skapa en styrenhet som inte kräver autentisering. Denna åtgärd gör ingenting utom omdirigering. Den viktiga delen är att denna omdirigering kommer att rensa den befintliga autentiseringskakan. Webbläsaren kommer att skicka en ny begäran, och IIS kommer att inse att det inte finns någon giltig session.
`` `csharp
[Tillåteanonym] // detta är avgörande! Tillåter åtkomst utan autentisering
Public ActionResult Logoff ()
{
returnera omdirigering ("/"); // eller till någon URL som inte kräver autentisering
}
`` `
* Rensa kakor (klientsidan JavaScript - mindre pålitlig): Detta tillvägagångssätt är i allmänhet mindre föredraget eftersom den förlitar sig på klientsidan och kanske inte alltid fungerar pålitligt över webbläsare:
`` `JavaScript
Document.Cookie ="ASP.NET_SessionId =; löper ut =Thu, 01 jan 1970 00:00:00 UTC; PATH =/;";
// behöver potentiellt ytterligare rader för att ta bort andra autentiseringskakor som är specifika för din installation.
fönster.location.href ="/logoff"; // omdirigera din logoff -åtgärd
`` `
Viktiga överväganden med Windows -autentisering:
* IIS -inställningar: Se till att din applikations IIS -inställningar är korrekt konfigurerade för Windows -autentisering.
* sessionhantering: Windows -autentisering förlitar sig ofta på serverns sessionhantering (IIS -sessionstillstånd). Omdirigeringsmetoden ovan slutar effektivt sessionen genom att tvinga en ny begäran utan en autentiseringskaka.
* Flera kakor: Beroende på din installation kan det finnas flera cookies relaterade till autentisering. Du kan behöva rensa de uttryckligen (även om den omdirigeringsmetoden vanligtvis räcker).
* kerberos: Om Kerberos är involverat (vanligt i företagsmiljöer) kan utloggningsprocessen vara mer komplex, eftersom Kerberos -biljetter har sin egen livscykel och hantering.
Rekommendation:
Överväg allvarligt att byta till formulär autentisering om du har någon kontroll över ditt projekt. Det är mycket enklare att hantera användarsessioner och utloggning. HANTERING av Windows Authentication Logga ut är i sig mer komplex och mindre pålitlig. Tillvägagångssätten ovan fungerar, men förlitar sig på indirekta metoder för att avsluta Windows -sessionen. Testa alltid noggrant i olika webbläsare.