Er is geen enkel "uitloggen"-knopcommando in ASP.NET MVC dat op magische wijze het uitloggen van Windows-authenticatie afhandelt. Windows-verificatie wordt afgehandeld op het niveau van het besturingssysteem en IIS, en niet alleen binnen uw applicatie. Uw toepassing moet een signaal geven aan de browser en IIS om de geverifieerde sessie te beëindigen. Dit zijn de gebruikelijke benaderingen:
1. Formulierauthenticatie (eenvoudigst, aanbevolen indien mogelijk):
Als je *enige* flexibiliteit hebt in je configuratie, is de eenvoudigste en schoonste oplossing om over te schakelen naar Formulierauthenticatie . Windows-authenticatie is inflexibel en nauw gekoppeld aan het gebruikersbeheer van de server. Met Formulierauthenticatie kunt u gebruikersaccounts binnen uw applicatie beheren en is er een eenvoudig uitlogmechanisme. Vervolgens zal een eenvoudige `FormsAuthentication.SignOut()` in uw controlleractie het uitloggen afhandelen.
```cscherp
[HttpPost]
openbare ActionResult Afmelden()
{
FormulierenAuthenticatie.SignOut();
return RedirectToAction("Index", "Home"); // Omleiding naar uw startpagina
}
```
2. Een nieuw verzoek forceren (Windows-authenticatie):
Als u Windows-authenticatie *moet* gebruiken, moet u een nieuw verzoek activeren dat een herauthenticatie (of het ontbreken daarvan) zal afdwingen. Er is geen directe opdracht om uit te loggen; je vernietigt feitelijk de sessiecookie:
* Omleiden naar een speciale URL: Maak een controlleractie waarvoor geen verificatie vereist is. Deze actie doet niets anders dan omleiden. Het belangrijkste is dat deze omleiding de bestaande authenticatiecookie verwijdert. De browser verzendt een nieuw verzoek en IIS herkent dat er geen geldige sessie is.
```cscherp
[AllowAnonymous] // Dit is cruciaal! Staat toegang toe zonder authenticatie
openbare ActionResult Afmelden()
{
retourneert Omleiding("/"); // Of naar elke URL waarvoor geen authenticatie vereist is
}
```
* Cookies wissen (Client-Side JavaScript - Minder betrouwbaar): Deze aanpak heeft over het algemeen minder de voorkeur omdat deze afhankelijk is van acties aan de clientzijde en mogelijk niet altijd betrouwbaar werkt in verschillende browsers:
```javascript
document.cookie ="ASP.NET_SessionId=; vervalt=do, 1 januari 1970 00:00:00 UTC; pad=/;";
//Mogelijk zijn er extra regels nodig om andere authenticatiecookies te verwijderen die specifiek zijn voor uw configuratie.
window.location.href ="/Afmelden"; // Omleiden naar uw LogOff-actie
```
Belangrijke overwegingen bij Windows-verificatie:
* IIS-instellingen: Zorg ervoor dat de IIS-instellingen van uw toepassing correct zijn geconfigureerd voor Windows-verificatie.
* Sessiebeheer: Windows-verificatie is vaak afhankelijk van het sessiebeheer van de server (IIS-sessiestatus). De bovenstaande omleidingsmethode beëindigt de sessie effectief door een nieuw verzoek te forceren zonder een authenticatiecookie.
* Meerdere cookies: Afhankelijk van uw instellingen kunnen er verschillende cookies zijn die verband houden met authenticatie. Mogelijk moet u deze expliciet wissen (hoewel de omleidingsmethode meestal voldoende is).
* Kerberos: Als Kerberos erbij betrokken is (gebruikelijk in bedrijfsomgevingen), kan het uitlogproces complexer zijn, omdat Kerberos-tickets hun eigen levenscyclus en beheer hebben.
Aanbeveling:
Overweeg serieus om over te stappen op Formulierauthenticatie als u enige controle over uw project heeft. Het is veel eenvoudiger om gebruikerssessies te beheren en uit te loggen. Het afhandelen van het uitloggen via Windows-authenticatie is inherent complexer en minder betrouwbaar. De bovenstaande benaderingen werken, maar zijn afhankelijk van indirecte methoden om de Windows-sessie te beëindigen. Test altijd grondig in verschillende browsers. |