2009-07-01 10 views
43

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

<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("/"); 
} 

Antecedentes:

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 suplantarme con la autenticación Forms porque HttpContext.Current.User.Identity no será WindowsIdentity. Impersonate using Forms Authentication

+0

Parece que suplantar a un usuario a través de la autenticación de formularios es posible después de todo. Ver http://stackoverflow.com/a/11873754/359765 – bgh

Respuesta

29

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

11

La autenticación de Windows funciona en el nivel de IIS pasando 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.

+0

¡Impresionante! Gracias por el enlace a ese artículo. Exactamente lo que quería para mi otra pregunta. Por favor publíquelo en mi otra pregunta y lo verificaré como respondí en ese. – Robert

20

Para los navegadores IE solo, puede utilizar el siguiente javascript para cerrar la sesión del usuario si utiliza 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, 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.

+0

Brillante! Esperaba que esto causara una excepción en navegadores que no fueran IE, para que en el bloque catch pudiéramos mostrar una alerta a los usuarios que no son de IE con más instrucciones. Hay una excepción en FF pero desafortunadamente no en Chrome. Entonces, ¿sería suficiente cerrar la ventana? No es seguro. Las pruebas rápidas sugieren que podría estar en Chrome y FF, pero estoy seguro de que con IE (sin la secuencia de comandos anterior), todas las ventanas deben cerrarse antes de que se borre la autenticación. –

+1

También vale la pena señalar que según este enlace, el comando anterior borra TODOS los datos de autenticación no solo para el sitio que lo solicitó http://msdn.microsoft.com/en-us/library/ms536979.aspx –

+0

¡Brillante! Cambié el código para redireccionar como se describe aquí - http://stackoverflow.com/questions/12742319/formsauthentication-signout-not-working-for-iis-windows-authentication-op – Jack

3

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

6

que tenían 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 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); 
} 

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

Cuestiones relacionadas