Pregunta

¿Cómo cerrar la sesión cuando se utiliza la autenticación de Windows en ASP.NET como esto web.config?

<authentication mode="Windows" />

Ya lo he intentado, sin éxito, la siguiente. Se vuelve a dirigir, 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, ya que necesito para suplantar la identidad mediante Active Directory para obtener acceso a los archivos locales. Y no puedo hacerse pasar por el uso de la autenticación de formularios porque el HttpContext.Current.User.Identity no será un WindowsIdentity. Impersonate mediante la autenticación de las Formas

¿Fue útil?

Solución

No hay botón de cierre de sesión en el servidor funcionará cuando se utiliza la autenticación de "Windows". Debe utilizar la autenticación de "Formularios" si quieres un botón de cierre de sesión, o cerrar el navegador del usuario.

Otros consejos

Para los navegadores IE sólo , puede utilizar el siguiente javascript para cerrar la sesión del usuario si se utiliza la autenticación de Windows. (Nota: cerrar el navegador no es necesario, pero se recomienda ya que el usuario podría estar utilizando un navegador que no IE).

Si el usuario hace clic en "No" para cerrar el navegador, entonces el usuario se le pedirá un nombre de usuario / contraseña si intentan 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.

autenticación de Windows funciona en el nivel de IIS haciendo pasar el token de autenticación de Windows. Ya que la autenticación se produce a nivel de IIS realidad no se puede desconectarse de código de la aplicación. Sin embargo, no parece haber una respuesta a su problema aquí . Es la segunda pregunta dirigida y esencialmente implica el uso de la autenticación de formularios y la API LogonUser de Windows.

tuve una aplicación de SharePoint con la autenticación de Windows, que necesitaba cierre de sesión automático después de 15 minutos. Mezclé algunos códigos y aquí está el resultado. funciona correctamente en IE.

<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);
} 

poner estos códigos en su página principal, después del tiempo de 15 minutos de reposo, verá la página de inicio de sesión. espero que esto ayuda a alguien

Tengo este trabajo utilizando JavaScript en IE y Firefox, a pesar de que lo desconecta de todo lo que está conectado a en el IE. De alguna manera funciona en Safari, pero Safari lanza una advertencia de suplantación de identidad. No funciona en 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(); 
    } 

Las mejores respuestas que he visto se encuentran en Stackoverflow preguntas relacionadas:

¿Hay un navegador equivalente a ClearAuthenticationCache de IE?

y

Registro de un usuario al utilizar la autenticación básica HTTP

Básicamente lo que necesita para enviar una petición AJAX al servidor con credenciales no son válidas y tienen el servidor de aceptarlos.

tenía un montón de problemas con esto, a continuación se muestra el código que funciona, es de esperar que alguien le resulta ú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");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top