it-swarm.com.de

http-Basisauthentifizierung "Abmelden"

HTTP-Basisauthentifizierungsanmeldeinformationen werden gespeichert, bis der Browser geschlossen wird. Aber gibt es eine Möglichkeit, die Anmeldeinformationen zu entfernen, bevor der Browser geschlossen wird?

Ich habe über einen Trick mit HTTP 401-Statuscode gelesen, aber es scheint nicht richtig zu funktionieren (siehe Kommentar zur Antwort). Möglicherweise ist der mechanismus-Trac die Lösung .

Können die Anmeldeinformationen mit JavaScript gelöscht werden? Oder mit einer Kombination aus JavaScript und dem Status 401-Trick?

59
deamon

Update: Diese Lösung scheint in vielen Browsern nicht mehr zu funktionieren. Kaitsus Kommentar:

Diese Lösung, falsche Anmeldeinformationen zu senden, damit der Browser die richtigen authentifizierten Anmeldeinformationen vergisst, funktioniert in Chrome (16) und IE (9) nicht. Funktioniert in Firefox (9).


Tatsächlich können Sie eine Problemumgehung implementieren, indem Sie falsche Anmeldeinformationen an den Dienst senden. Dies funktioniert in Browsern, indem ein anderer (nicht vorhandener) Benutzername ohne Kennwort gesendet wird. Der Browser verliert die Informationen zu den authentifizierten Anmeldeinformationen.

Beispiel:

https://www.example.com/ => Anmelden mit grundlegender auth als "user1" 

Jetzt offen 

https: //[email protected]/

Sie sind abgemeldet. ;)

Grüße

Ps .: Aber testen Sie dies bitte mit allen benötigten Browsern, bevor Sie sich auf die angegebenen Informationen verlassen.

33
Jan.

Erweiterung der Antwort von Jan. und Aktualisierung der Antwort von owyongsk:

Hier ein Beispiel für ein Java-Script-Code von Jquery, mit dem der Browser im Wesentlichen eine falsche Anmeldeanforderung an die Seite sendet, die Sie schützen möchten. In allen getesteten Browsern wurden die zwischengespeicherten Anmeldeinformationen entfernt und der Benutzer wird zu einem nicht geschützten Benutzer geleitet Seite.

Die Warnung (), wenn etwas schief geht, sollte wahrscheinlich in etwas anderes geändert werden.

//Submits an invalid authentication header, causing the user to be 'logged out'
function logout() {
    $.ajax({
        type: "GET",
        url: "PUT_YOUR_PROTECTED_URL_HERE",
        dataType: 'json',
        async: true,
        username: "some_username_that_doesn't_exist",
        password: "any_stupid_password",
        data: '{ "comment" }'
    })
//In our case, we WANT to get access denied, so a success would be a failure.
.done(function(){
    alert('Error!')
})
//Likewise, a failure *usually* means we succeeded.
//set window.location to redirect the user to wherever you want them to go
.fail(function(){
    window.location = "/";
    });
}

Dann war es so einfach wie der Logout-Link, die Logout () - Funktion aufzurufen, und es schien für den Benutzer nahtlos zu funktionieren, obwohl es technisch immer noch ein Hackjob ist.

10
1n5aN1aC

Sie können einen Hack ausprobieren, der derzeit mit dem neuesten Chrome und Firefox funktioniert. Erstellen Sie auf Ihrem Server eine "/ logout" -Seite, die nur bestimmte Anmeldeinformationen akzeptiert, z. B. Benutzername: false, Kennwort: false. Anschließend können Sie mit dieser AJAX Anfrage den Benutzer an diese Seite senden.

  $("#logout").click(function(e){                                              
    e.preventDefault();                                                        
    var request = new XMLHttpRequest();                                        
    request.open("get", "/logout", false, "false", "false");                                                                                                                               
    request.send();                                                            
    window.location.replace("WHEREVER YOU WANT YOUR LOGGED OUT USER TO GO");                                              
  });

Was passiert ist, ist, dass der falsche Benutzername und das falsche Kennwort aus dem gültigen XMLHttpRequest statt aus den Anmeldeinformationen des aktuellen Benutzers zwischengespeichert werden. Wenn ein Benutzer versucht, sich auf einer Seite anzumelden, verwendet er die zwischengespeicherten falschen Anmeldeinformationen einen anderen eingeben Hoffe das hilft!

7
owyongsk

Sie können Anmeldeinformationen mit JavaScript löschen:

    $("#logout").click(function(){
        try {
            document.execCommand("ClearAuthenticationCache");
            window.location.href('/logout.html'); // page with logout message somewhere in not protected directory
        } catch (exception) {}
    });

Dieser Code funktioniert nur in IE. Dies ist der Grund, warum der try/catch-Block dort hinzugefügt wird ..__ Aus demselben Grund sollten Sie den Logout-Link nur für IE - Benutzer anzeigen:

    <!--[if IE]>
        <div id="logout">[Logout]</div>
    <![endif]-->

Und für andere Benutzer ist mein Vorschlag so etwas wie:

    <div id="logout2" onclick="alert('Please close your browser window to logout')">[Logout]</div>
4
Vilius Gaidelis

ich habe gerade eine Implementierung fertiggestellt, die gut funktioniert hat: Auf dem Server werte ich Sitzung, Benutzername und Kennwort aus. Daher verfolge ich diese Informationen. Der Login-Algorithmus lautet wie folgt:

1.Überprüfen, ob Benutzer und Kennwort nicht leer sind, andernfalls 401 zurückgeben.

2.Überprüfen Sie, ob wir die Sitzung in unserer Liste der angemeldeten Benutzer registriert haben. Wenn nicht, überprüfen Sie, ob Benutzer und Kennwort gültig sind. Wenn dies der Fall ist, speichern Sie die Sitzungs-ID in unserer Liste. Dann geben Sie 401 ..__ zurück. Ich erkläre diesen Schritt: Wenn die Sitzungs-ID anders ist, ist eines von drei Dingen passiert: a) Der Benutzer öffnet ein anderes Fenster . b) Die Benutzersitzung ist beendet, dh der Benutzer hat sich abgemeldet . c) Die Sitzung ist aufgrund von Inaktivität abgelaufen . Wir möchten jedoch die Sitzung speichern, solange die Anmeldeinformationen des Benutzers gültig sind, aber eine 401 zurücksenden, um einmal nach dem Kennwort zu fragen. Wenn wir die Sitzung nicht speichern, kann sich der Benutzer nicht anmelden, da die neue Sitzungs-ID nicht vorhanden ist in unserer Liste.

3.Überprüfen Sie, ob die Benutzeranmeldeinformationen richtig sind. Wenn ja, speichern Sie die Sitzungsinformationen und fahren Sie mit dem Bereitstellen der Seiten fort. Andernfalls geben Sie 401 zurück. 

Das einzige, was ich zum Abmelden eines Benutzers benötige, ist das Schließen der Sitzung auf dem Server, wenn der Benutzer die Abmeldeseite anfordert und der Webbrowser den Anmeldedialog erneut anzeigt.

Ich denke, während ich dies schreibe, muss es einen Schritt geben, in dem das Programm überprüft, ob der Benutzer bereits angemeldet ist, um den Identitätswechsel zu vermeiden. Vielleicht kann ich mehr als eine Sitzungs-ID pro Benutzer speichern, um mehrere Sitzungen zuzulassen Ihre Kommentare dazu.

Hoffen Sie, dass Sie die Idee bekommen, und kommentieren Sie, wenn Sie Sicherheitslücken sehen;)

4
Erwin

Wenn Sie die Kontrolle über den Servercode haben, können Sie eine "Logout" -Funktion erstellen, die unabhängig von den angegebenen Berechtigungsnachweisen "401 Unauthorized" antwortet. Dieser Fehler zwingt Browser, gespeicherte Anmeldeinformationen zu entfernen.

Ich habe dies gerade mit Chrome 34, IE 11, Firefox 25 - mit Express.js-Server und HTTP-Basisauthentifizierung getestet.

3
Greg T

Was in Chrome (Version 66) für mich funktioniert hat, ist das Senden einer Ajax-Anforderung an eine URL, die 401 zurückgibt. Auf diese Weise scheint der Standardauthentifizierungscache gelöscht zu sein.

var xhttp = new XMLHttpRequest();
xhttp.open("GET", "/url_that_returns_401", true);
xhttp.send();
0
Thomas