Sair de autenticação ASP.NET do Windows
-
21-08-2019 - |
Pergunta
Como você sair ao usar a autenticação do Windows no ASP.NET como esta web.config?
<authentication mode="Windows" />
Eu já tentei o seguinte sem sucesso. Ele redireciona, mas não registra o usuário.
void logoutButton_Click(object sender, EventArgs e) {
HttpContext.Current.Session.Clear();
HttpContext.Current.Session.Abandon();
ViewState.Clear();
FormsAuthentication.SignOut();
Response.Redirect("/");
}
Informações de fundo:
Eu tenho que usar a autenticação do Windows, porque eu preciso representar a identidade usando o Active Directory para obter acesso a arquivos locais. E eu não pode personificar usando autenticação de formulários porque o HttpContext.Current.User.Identity
não será um WindowsIdentity
.
Impersonate usando autenticação de formulários
Solução
No botão de logout do lado do servidor funcionará quando usando a autenticação "Windows". Você deve usar "Formulários" autenticação, se você quer um botão de logout, ou fechar o navegador do usuário.
Outras dicas
Para navegadores IE única , você pode usar o seguinte javascript para sair o usuário se estiver usando autenticação do Windows. (Nota: fechar o navegador não é obrigatório, mas recomendado desde que o usuário pode estar usando um navegador não-IE).
Se o usuário clicar em "Não" para fechar o navegador, em seguida, o usuário será solicitado a fornecer um nome de usuário / senha se tentarem acessar uma página no site que requer autenticação.
try {
document.execCommand("ClearAuthenticationCache");
}
catch (e) { }
window.close();
Este código foi tirado de página Signout.aspx do SharePoint.
obras de autenticação do Windows no nível IIS por passar o seu token de autenticação do Windows. Desde a autenticação ocorre no nível IIS você não pode realmente fazer logout do código do aplicativo. No entanto, parece haver uma resposta para o seu problema href="http://visualstudiomagazine.com/articles/2004/05/01/activate-windows-impersonation-selectively.aspx" aqui . É a segunda questão abordada e, essencialmente, envolve o uso de formas de autenticação e a API LogonUser do Windows.
Eu tinha um aplicativo SharePoint com autenticação do Windows, eu precisava de logout automático após 15 minutos. Eu misturei-se alguns códigos e aqui está o resultado. ele funciona no IE corretamente.
<script type="text/javascript">
var t;
window.onload = resetTimer;
document.onmousemove = resetTimer;
document.onkeypress = resetTimer;
function logout() {
try {
document.execCommand("ClearAuthenticationCache");
window.location.href = window.location.protocol.replace(/\:/g, '') + "://" + window.location.host + "/_layouts/customlogin14.aspx";
}
catch (e) { }
}
function resetTimer() {
window.clearTimeout(t);
t = window.setTimeout(logout, 900000);
}
colocar estes códigos em sua página principal, após 15 minutos de tempo ocioso você verá a página de login. espero que este alguém ajuda
Eu tenho esse trabalho usando JavaScript no IE e Firefox, embora ele registra-lo para fora de tudo o que você estiver logado no no IE. É uma espécie de obras no Safari, mas Safari joga-se um aviso de phishing. Não funciona no Opera.
try {
if (document.all)
{
document.execCommand("ClearAuthenticationCache");
window.location = "/";
}
else
{
window.location = "http://logout:logout@example.com";
}
}
catch(e)
{
alert("It was not possible to clear your credentials from browser cache. Please, close your browser window to ensure that you are completely logout of system.");
self.close();
}
As melhores respostas que tenho visto são encontrados em questões StackOverflow relacionados:
Existe um navegador equivalente a ClearAuthenticationCache do IE?
e
Registrando um usuário quando usando HTTP autenticação básica
Basicamente, você precisa enviar uma solicitação AJAX para o servidor com credenciais inválidas e ter o servidor aceitá-los.
tinha um monte de problemas com isso, abaixo está o código que funciona, espero que alguém acha útil.
foreach (var cookie in Request.Cookies.Keys)
{
Response.Cookies.Delete(cookie);
}
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
Response.Cookies.Append("EdgeAccessCookie", "", new Microsoft.AspNetCore.Http.CookieOptions()
{
Path = "/",
HttpOnly = true,
SameSite = SameSiteMode.Lax, Expires = DateTime.Now.AddDays(-1)
});
Response.Redirect("https://adfs.[sitename].com/adfs/ls?wa=wsignout1.0");