2009-07-01 23 views
43

Come si disconnette quando si utilizza l'autenticazione di Windows in ASP.NET come questo web.config?Logout di Windows ASP.NET logout

<authentication mode="Windows" /> 

Ho già provato il seguente tentativo senza successo. Reindirizza, ma non disconnette l'utente.

void logoutButton_Click(object sender, EventArgs e) { 
    HttpContext.Current.Session.Clear(); 
    HttpContext.Current.Session.Abandon(); 
    ViewState.Clear(); 
    FormsAuthentication.SignOut(); 
    Response.Redirect("/"); 
} 

Informazione:

devo utilizzare l'autenticazione di Windows perché ho bisogno di rappresentare l'identità utilizzando Active Directory per ottenere l'accesso ai file locali. E non posso impersonare utilizzando l'autenticazione basata su form perché lo HttpContext.Current.User.Identity non sarà un WindowsIdentity. Impersonate using Forms Authentication

+0

Sembra impersonare un utente tramite l'autenticazione Forms è possibile dopo tutto. Vedi http://stackoverflow.com/a/11873754/359765 – bgh

risposta

29

Nessun pulsante di disconnessione dal lato server funzionerà quando si utilizza l'autenticazione "Windows". È necessario utilizzare l'autenticazione "Moduli" se si desidera un pulsante di disconnessione o chiudere il browser dell'utente.

11

L'autenticazione di Windows funziona a livello IIS passando il token di autenticazione di Windows. Poiché l'autenticazione si verifica a livello di IIS, non è possibile disconnettersi dal codice dell'applicazione. Tuttavia, sembra esserci una risposta al tuo problema here. È la seconda domanda indirizzata e riguarda essenzialmente l'utilizzo dell'autenticazione basata su form e l'API di Windows LogonUser.

+0

Fantastico! Grazie per il link a quell'articolo. Esattamente quello che volevo per la mia altra domanda. Per favore, postalo alla mia altra domanda e ti controllerò come risposta su quello. – Robert

20

Per i browser IE solo, è possibile utilizzare il seguente javascript per disconnettere l'utente se si utilizza l'autenticazione di Windows. (Nota: la chiusura del browser non è richiesta, ma consigliata poiché l'utente potrebbe utilizzare un browser non IE).

Se l'utente fa clic su "No" per chiudere il browser, all'utente verrà richiesto un nome utente/password se tentano di accedere a una pagina del sito che richiede l'autenticazione.

try { 
    document.execCommand("ClearAuthenticationCache"); 
} 
catch (e) { } 
window.close(); 

Questo codice è stato preso dalla pagina Signout.aspx di SharePoint.

+0

Brillante! Speravo che ciò avrebbe causato un'eccezione nei browser non IE in modo che nel blocco catch potessimo visualizzare un avviso per gli utenti non IE con ulteriori istruzioni. C'è un'eccezione in FF ma non Chrome, sfortunatamente. Quindi, chiudere la finestra sarebbe sufficiente? Non sono sicuro. Test rapidi suggeriscono che potrebbe essere in Chrome e FF, ma so per certo che con IE (senza lo script sopra) tutte le finestre devono essere chiuse prima che l'autenticazione venga cancellata. –

+1

Vale anche la pena sottolineare che in base a questo link il comando precedente cancella TUTTI i dati di autenticazione non solo per il sito che lo richiedeva http://msdn.microsoft.com/en-us/library/ms536979.aspx –

+0

Brillante! Ho cambiato il codice per reindirizzare come descritto qui - http://stackoverflow.com/questions/12742319/formsauthentication-signout-not-working-for-iis-windows-authentication-op – Jack

3

Ho questo funzionamento utilizzando JavaScript sia in IE e Firefox, anche se ti disconnette da tutto ciò che hai effettuato l'accesso in IE. Funziona in Safari, ma Safari lancia un avvertimento di phishing. Non funziona in 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

Avevo un'applicazione SharePoint con autenticazione di Windows, avevo bisogno del logout automatico dopo 15 minuti. Ho mescolato alcuni codici ed ecco il risultato. funziona correttamente in 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); 
} 

messo questi codici nella tua pagina master, dopo 15 minuti il ​​tempo di inattività si vedrà la pagina di login. spero che questo aiuti qualcuno