Domanda

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

<authentication mode="Windows" />

Ho già provato la seguente senza successo. Si reindirizza, ma non registra l'utente.

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

Info Background:

È necessario 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 Forms perché il HttpContext.Current.User.Identity non sarà un WindowsIdentity. Impersonare con autenticazione basata su form

È stato utile?

Soluzione

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

Altri suggerimenti

per IE browser solo , è possibile utilizzare il seguente javascript per il logout l'utente se si utilizza l'autenticazione di Windows. (Nota: la chiusura del browser non è obbligatorio, ma raccomandato in quanto l'utente potrebbe essere utilizzando un browser non-IE).

Se l'utente fa clic su "No" per chiudere il browser, l'utente verrà richiesto per 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 da pagina Signout.aspx di SharePoint.

L'autenticazione di Windows funziona a livello di IIS facendo passare il token di autenticazione di Windows. Poiché l'autenticazione avviene a livello di IIS non si può effettivamente uscire dal codice dell'applicazione. Tuttavia, sembra che ci sia una risposta al vostro problema qui . E 'la seconda domanda rivolta e coinvolge essenzialmente utilizzando i moduli di autenticazione e l'API LogonUser di Windows.

ho avuto un'applicazione di SharePoint con l'autenticazione di Windows, avevo bisogno di logout automatico dopo 15 minuti. Ho mescolato alcuni codici ed ecco il risultato. funziona in IE correttamente.

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

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

Ho questo lavoro utilizzando JavaScript in IE e Firefox, anche se si registra fuori tutto ciò che si è registrato in in IE. E 'sorta di opera in Safari, ma Safari lancia un avviso di phishing. Non funziona in 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(); 
    } 

Le risposte migliori che ho visto si trovano nelle domande StackOverflow correlati:

C'è un browser equivalente a ClearAuthenticationCache di IE?

e

registrazione di un utente quando si utilizza l'autenticazione HTTP di base

In sostanza è necessario inviare una richiesta AJAX al server con credenziali non valide e che il server li accetti.

Ha avuto un sacco di problemi con questo, al di sotto è il codice che funziona, si spera che qualcuno lo trova utile.

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");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top