2016-05-23 53 views
0

我正在使用基本HTTP身份驗證(沒有SSL進行測試)。Angular HTTP基本身份驗證註銷標頭更改被忽略

登錄工作正常,我們發送$http請求與授權標頭,如果登錄是正確的,它的工作原理。

對於註銷,我將授權標頭設置爲錯誤的值併發送$http請求來「欺騙」服務器。服務器似乎忽略新的更改的auth頭。我使用FF中的開發人員工具驗證了標頭值全是1,但請求仍然成功。

如何「註銷」?註銷功能發送錯誤的授權標頭,瀏覽器根據螢火蟲發送它。這是怎麼回事?如果這有所作爲,那麼這是一個包含Wildfly 9和Shiro的Java EE 7應用程序。

下面是代碼:

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

基本身份驗證正在爲每個請求發送用戶名和密碼。什麼是註銷? –

+0

我希望瀏覽器忘記用戶名和密碼,或使用無效的代碼(因此代碼:'$ http.defaults.headers.common ['Authorization'] ='基本111111111111111111';'設置一個「壞」認證字符串... – mikeb

回答

2

一個XHR請求不會神奇地刪除瀏覽器緩存中的信息發送內自己授權字符串。基本認證沒有註銷的概念。使用基本身份驗證進行「註銷」的唯一方法是在服務器上使憑據無效,即更改用戶名和/或密碼,以便存儲的憑證不再起作用。

+0

對,並通過修改頭部併發送應該這樣做的請求,對嗎?它在我發佈的代碼中。 – mikeb

+0

@mikeb:您正在客戶端執行手動身份驗證響應請求。將不會更改服務器期望的憑據,也不會更改在客戶端緩存的憑證。再次:沒有註銷基本身份驗證,唯一的方法是「...更改用戶名和/或密碼,以便存儲「在這種情況下,」更改「在服務器上確實發生了變化,而不是簡單地使用不同的憑據來處理客戶端的單個請求 –

+0

好吧,您的意思是更改服務器期望的密碼所以如果我的有效的登錄是測試/測試,我實際上必須更改服務器端權限,因爲沒有辦法告訴客戶端發佈憑證? – mikeb