Cierre de autenticación de Windows de ASP.NET
windows-authentication logout (4)
¿Cómo se desconecta al usar la autenticación de Windows en ASP.NET como este web.config?
<authentication mode="Windows" />
Ya he intentado lo siguiente sin éxito. Redirige, pero no cierra la sesión del usuario.
void logoutButton_Click(object sender, EventArgs e) {
HttpContext.Current.Session.Clear();
HttpContext.Current.Session.Abandon();
ViewState.Clear();
FormsAuthentication.SignOut();
Response.Redirect("/");
}
Información de fondo:
Tengo que usar la autenticación de Windows porque necesito suplantar la identidad usando Active Directory para obtener acceso a los archivos locales. Y no puedo suplantar el uso de la autenticación Forms porque HttpContext.Current.User.Identity
no será una WindowsIdentity
. Suplantar usando Autenticación de formularios
La autenticación de Windows funciona en el nivel de IIS al pasar su token de autenticación de Windows. Debido a que la autenticación ocurre en el nivel de IIS, no puede desconectarse del código de la aplicación. Sin embargo, parece que hay una respuesta a su problema here . Es la segunda pregunta abordada y, esencialmente, implica el uso de la Autenticación de formularios y la API de LogonUser de Windows.
Las mejores respuestas que he visto se encuentran en preguntas relacionadas con :
¿Hay un navegador equivalente a ClearAuthenticationCache de IE?
y
Cerrar sesión un usuario cuando usa autenticación HTTP básica
Básicamente, debe enviar una solicitud AJAX al servidor con credenciales no válidas y que el servidor las acepte.
Tenía una aplicación de SharePoint con autenticación de Windows, necesitaba el cierre de sesión automático después de 15 minutos. Mezclé algunos códigos y aquí está el resultado. funciona en IE correctamente.
<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);
}
ponga estos códigos en su página maestra, después de 15 minutos de inactividad, verá la página de inicio de sesión. Espero que esto ayude a alguien
Tengo este trabajo usando JavaScript tanto en IE como en Firefox, aunque te desconecta de todo lo que iniciaste en IE. Funciona de alguna manera en Safari, pero Safari lanza una advertencia de phishing. No funciona en Opera
try { if (document.all) { document.execCommand("ClearAuthenticationCache"); window.location = "/"; } else { window.location = "http://logout:[email protected]"; } } 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(); }