2016-05-23 4 views
0

Ich verwende grundlegende HTTP-Authentifizierung (ohne SSL zum Testen).Angular HTTP Basic Auth Logout Header-Änderung ignoriert

Die Anmeldung funktioniert gut, wir senden eine $http Anfrage mit dem Autorisierungsheader und wenn die Anmeldung korrekt ist, funktioniert es.

Zum Ausloggen setze ich die Authorization-Header auf einen schlechten Wert und senden Sie eine $http Anfrage, um den Server "Trick". Der Server scheint den geänderten Auth-Header zu ignorieren. Ich habe mit Entwickler-Tools in FF überprüft, dass der Header-Wert alle Einsen ist, aber die Anfrage ist immer noch erfolgreich.

Wie kann ich mich "abmelden"? Die Logout-Funktion sendet einen fehlerhaften Authorization-Header und der Browser sendet ihn gemäß Firebug. Was ist los? Dies ist eine Java EE 7 App mit Wildfly 9 und Shiro, wenn das einen Unterschied macht. Hier

ist der Code:

var DataFactory = function($http, $rootScope, $base64, $cookieStore) { 

    var _debug = false; 
    function _d(message) { 
     if (!_debug) { 
      return; 
     } 
     console.log(message); 
    } 

    function setDebug(flag) { 
     _debug = flag; 
    } 

    function doLogout() { 
     _d("Logging out"); 
     $rootScope.globals = {}; 
     $cookieStore.remove('globals'); 
     $http.defaults.headers.common['Authorization'] = 'Basic 111111111111111111'; 
     $http.get(
       'http://localhost:8080/myapp/rest/v1/svc') 
       .then(function(data) { 
        alert("Logout: " + JSON.stringify(data.data)); 
       }, function(data) { 
        alert("Logout Error: " + JSON.stringify(data)) 
       }); 
    } 

    function doLogin(username, password) { 
     var token = $base64.encode(username + ":" + password); 
     _d("Logging " + username + " in with token " + token); 

     $http.defaults.headers.common['Authorization'] = 'Basic ' + token; // jshint 
     // ignore:line 
     $rootScope.globals = { 
      token : token, 
      username : username 
     }; 
     $cookieStore.put("globals", $rootScope.globals); 
     _d("Login finished, globals are: " + JSON.stringify($rootScope.globals)); 
     $http.get(
       'http://localhost:8080/myapp/rest/v1/svc') 
       .then(function(data) { 
        alert(JSON.stringify(data.data)); 
       }, function(data) { 
        alert("Error: " + JSON.stringify(data)) 
       }); 
    } 
    ; 

    return { 
     setDebug : setDebug, 
     doLogin : doLogin, 
     doLogout : doLogout 
    }; 
} 
+0

Basic Auth sendet Benutzer und Passwort mit jeder Anfrage. Was ist Abmeldung? –

+0

Ich möchte, dass der Browser den Benutzernamen und das Passwort vergisst oder einen ungültigen (also den Code: '$ http.defaults.headers.common ['Authorization'] = 'Basic 111111111111111111';' verwendet, um eine "schlechte" Authentifizierung zu setzen string ... – mikeb

Antwort

2

Senden Sie Ihre eigenen Berechtigungs Zeichenfolge innerhalb einer XHR Anfrage nicht auf magische Weise die Informationen löschen im Browser zwischengespeichert. Die Standardauthentifizierung hat kein Abmeldungskonzept. Die einzige Möglichkeit, sich mit der Standardauthentifizierung abzumelden, besteht darin, die Anmeldedaten auf dem Server ungültig zu machen, d. H. Den Benutzernamen und/oder das Passwort zu ändern, damit die gespeicherten Anmeldedaten nicht mehr funktionieren.

+0

Richtig, und durch die Änderung der Kopfzeile und das Senden der Anfrage, die es tun sollte, richtig? Es ist in dem Code, den ich gepostet. – mikeb

+0

@mikeb: Sie sind eine Anfrage mit einer manuellen Authentifizierung Antwort auf der Client-Seite Die Anmeldedaten, die der Server erwartet, werden nicht geändert, und die auf dem Client zwischengespeicherten Anmeldeinformationen werden ebenfalls nicht geändert.Wiederum: Es gibt keine Abmeldung für grundlegende Authentifizierung und die einzige Möglichkeit besteht darin, "... den Benutzernamen und/oder das Passwort zu ändern Anmeldeinformationen funktionieren nicht mehr. "." Ändern "in diesem Fall ist eine echte Änderung auf dem Server und nicht einfach verschiedene Anmeldeinformationen für eine einzelne Anfrage durch den Client verwenden. –

+0

OK, also meinst du ändern das Passwort, das der Server erwartet Also wenn mein Eine gültige Anmeldung ist Test/Test. Ich müsste die serverseitigen Berechtigungen ändern, da es keine Möglichkeit gibt, dem Client mitzuteilen, dass die Anmeldeinformationen freigegeben werden sollen. – mikeb