Cierre de autenticación de Windows de ASP.NET
windows-authentication logout (6)
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.
¿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
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.
Ningún botón de cierre de sesión del lado del servidor funcionará cuando se use la autenticación "Windows". Debe utilizar la autenticación "Formularios" si desea un botón de cierre de sesión o cerrar el navegador del usuario.
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(); }
Para los navegadores IE solamente , puede usar el siguiente javascript para cerrar la sesión del usuario si usa la Autenticación de Windows. (Nota: no se requiere cerrar el navegador, pero se recomienda ya que el usuario podría estar usando un navegador que no sea IE).
Si el usuario hace clic en "No" para cerrar el navegador, se le pedirá al usuario un nombre de usuario / contraseña si intenta acceder a una página en el sitio que requiere autenticación.
try {
document.execCommand("ClearAuthenticationCache");
}
catch (e) { }
window.close();
Este código fue tomado de la página Signout.aspx de SharePoint.