Não há um único comando "logout" no ASP.NET MVC que manipula magicamente o logout de autenticação do Windows. A autenticação do Windows é tratada no sistema operacional e no nível do IIS, não apenas dentro do seu aplicativo. Seu aplicativo precisa sinalizar para o navegador e o IIS para encerrar a sessão autenticada. Aqui estão as abordagens comuns:
1. Autenticação de formulários (mais simples, recomendada, se possível): Se você tem * alguma * flexibilidade na sua configuração, a solução mais fácil e limpa é para alternar para a autenticação de formulários . A autenticação do Windows é inflexível e fortemente acoplada ao gerenciamento de usuários do servidor. A autenticação de formulários permite gerenciar contas de usuário em seu aplicativo e fornece um mecanismo de logout direto. Em seguida, uma simples `formSAuthentication.signout ()` na ação do seu controlador lidará com o logout.
`` `csharp
[Httppost]
Public ActionResult Logoff ()
{
FormSAuthentication.signout ();
Retornar RedirectToAction ("Index", "Home"); // redireciona para sua página inicial
}
`` `
2. Forçando uma nova solicitação (autenticação do Windows): Se você * deve * usar a autenticação do Windows, precisará acionar uma nova solicitação que forçará uma re-autenticação (ou a falta dela). Não há comando "logout" direto; Você está essencialmente destruindo o cookie da sessão:
*
redirecionar para um URL especial: Crie uma ação do controlador que não requer autenticação. Esta ação não faz nada, exceto o redirecionamento. A parte importante é que esse redirecionamento limpará o cookie de autenticação existente. O navegador enviará uma nova solicitação e o IIS reconhecerá que não há sessão válida.
`` `csharp
[Allowanonymous] // Isso é crucial! Permite o acesso sem autenticação
Public ActionResult Logoff ()
{
Retornar redirecionamento ("/"); // ou para qualquer URL que não exija autenticação
}
`` `
*
Clear Cookies (JavaScript do lado do cliente - menos confiável): Essa abordagem é geralmente menos preferida porque se baseia em ações do lado do cliente e nem sempre pode funcionar de maneira confiável nos navegadores:
`` `JavaScript
document.cookie ="asp.net_sessionId =; expira =qui, 01 de janeiro de 1970 00:00:00 UTC; path =/;";
// Potencialmente, precisa de linhas adicionais para remover outros cookies de autenticação específicos para sua configuração.
window.Location.href ="/logoff"; // redirecionar para sua ação de logoff
`` `
Considerações importantes com autenticação do Windows: *
IIS Configurações: Verifique se as configurações do IIS do seu aplicativo estão definidas corretamente para a autenticação do Windows.
*
Gerenciamento da sessão: A autenticação do Windows geralmente se baseia no gerenciamento de sessão do servidor (estado da sessão do IIS). O método de redirecionamento acima termina efetivamente a sessão, forçando uma nova solicitação sem um cookie de autenticação.
*
biscoitos múltiplos: Dependendo da sua configuração, pode haver vários cookies relacionados à autenticação. Pode ser necessário limpá -los explicitamente (embora o método de redirecionamento geralmente seja suficiente).
*
Kerberos: Se Kerberos estiver envolvido (comum em ambientes corporativos), o processo de logout pode ser mais complexo, pois os ingressos para Kerberos têm seu próprio ciclo de vida e gerenciamento.
Recomendação: Considere seriamente mudar para a autenticação de formulários se tiver algum controle sobre seu projeto. É muito mais simples gerenciar sessões de usuário e logout. O manuseio de autenticação do Windows é inerentemente mais complexo e menos confiável. As abordagens acima funcionam, mas dependem dos métodos indiretos para encerrar a sessão do Windows. Sempre teste bem em diferentes navegadores.