Frage

Wie abzumelden Sie, wenn die Windows-Authentifizierung in ASP.NET verwenden wie diese web.config?

<authentication mode="Windows" />

Ich habe bereits versucht, die folgenden erfolglos. Es leitet, aber nicht den Benutzer abzumelden.

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

Hintergrund Info:

Ich habe die Windows-Authentifizierung verwenden, weil ich die Identität mithilfe von Active Directory zum Imitieren benötigen Zugriff auf lokale Dateien zu gewinnen. Und ich kann nicht imitieren die Formularauthentifizierung, da die HttpContext.Current.User.Identity wird kein WindowsIdentity werden. Impersonate Formularauthentifizierung mit

War es hilfreich?

Lösung

Kein serverseitige Logout-Button funktioniert, wenn „Windows“ Authentifizierung. Sie müssen „Formulare“ Authentifizierung verwenden, wenn Sie einen Logout-Button werden sollen, oder den Browser des Benutzers schließen.

Andere Tipps

Für IE-Browser nur , können Sie das folgende Javascript verwenden, um die Benutzer abzumelden, wenn die Windows-Authentifizierung verwenden. (Hinweis: Schließen des Browsers ist nicht erforderlich, wird aber empfohlen, da der Benutzer sein könnte, einen Nicht-IE-Browser).

Wenn der Benutzer klickt auf „Nein“, um den Browser zu schließen, dann wird der Benutzer nach einem Benutzername / Passwort gefragt werden, wenn sie versuchen, eine Seite auf der Website zuzugreifen, die eine Authentifizierung erforderlich ist.

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

Dieser Code wurde genommen von Sharepoint Signout.aspx Seite.

Windows-Authentifizierung arbeitet an der IIS-Ebene, indem Sie Ihre Windows-Authentifizierungs-Token übergeben. Da die Authentifizierung an der IIS-Ebene auftritt, kann man eigentlich nicht von Anwendungscode abzumelden. Allerdings scheint es eine Antwort auf Ihr Problem hier zu sein . Es ist die zweite Frage gerichtet und beinhaltet im Wesentlichen der Formularauthentifizierung und die Logonuser Windows-API verwendet wird.

hatte ich eine Sharepoint-Anwendung mit Windows-Authentifizierung, die ich brauchte automatische Abmeldung nach 15 Minuten. Ich mischte einige Codes und hier ist das Ergebnis. es funktioniert im Internet Explorer.

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

setzt diese Codes in der Masterseite, nach 15 Minuten Leerlaufzeit sehen Sie die Login-Seite. hoffen, dass diese Hilfe jemand

Ich habe diese Arbeit mit JavaScript in IE und Firefox, wenn man davon aus protokolliert alles, was Sie in im Internet Explorer angemeldet sind. Es funktioniert irgendwie in Safari, aber Safari wirft eine Phishing-Warnung auf. Funktioniert nicht 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(); 
    } 

Die besten Antworten, die ich habe in ähnlichen Fragen Stackoverflow gefunden gesehen:

Gibt es einen Browser entspricht IE ClearAuthenticationCache?

und

einen Benutzer abmelden, wenn HTTP-Basic-Authentifizierung mit

Grundsätzlich benötigen Sie einen AJAX-Request an den Server mit ungültigen Anmeldeinformationen senden und hat den Server sie akzeptieren.

Mit dieser Menge Mühe hat, unter dem Code, das funktioniert, hoffentlich jemand findet es nützlich.

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");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top