www-authenticate與BASE-64認證技術

www-authenticate是一種簡單的用戶身份認證技術。
很多驗證都採用這種驗證方式,尤其在嵌入式領域中。
優點:方便
缺點:這種認證方式在傳輸過程中採用的用戶名密碼加密方式爲BASE-64,其解碼過程非常簡單,如果被嗅探密碼幾乎是透明的.


服務器收到請求後,首先會解析發送來的數據中是否包含有:
Authorization: Basic XXXX=這種格式的數據
如果沒有這樣的header數據
那麼服務器會發送HTTP信息頭WWW-Authenticate: Basic realm=""到瀏覽器
要求瀏覽器發送合法的用戶名和密碼到服務端,爲了進一步告知瀏覽器,這個頁面需要認證 我們最還還是接着發送一個401錯誤
Header("HTTP/1.0 401 Unauthorized");


用戶輸入用戶名:admin 密碼:admin後,瀏覽器將以下面這種格式將數據發送給服務器端:Authorization: Basic YWRtaW46YWRtaW4=
Authorization: Basic爲www-authenticate認證的標準HTTP信息頭
YWRtaW46YWRtaW4=是經BASE-64加密後的用戶名和密碼
經解密後的格式爲 admin:admin


這時我們就可以用過PHP的全局變量來使用它們了
$_SERVER['PHP_AUTH_USER'];
$_SERVER['PHP_AUTH_PW'];


路由器都是這麼做的

if(!isset($_SERVER['PHP_AUTH_USER']) && !isset($_SERVER['PHP_AUTH_PW'])){
    Header("WWW-Authenticate: Basic realm=\"USER LOGIN\"");
    Header("HTTP/1.0 401 Unauthorized");
} else {
    echo $_SERVER['PHP_AUTH_USER'];
    echo $_SERVER['PHP_AUTH_PW'];
}


--------------------------------------

http://tool.chinaz.com/Tools/Base64.aspx


比如java的http請求認證:

Base64加密碼:Z3Vlc3Q6Z3Vlc3Q=   

表示:guest:guest

HttpGet httpGet = new HttpGet("http://192.168.1.10:55672/api/queues");
        httpGet.setHeader("Authorization", "Basic Z3Vlc3Q6Z3Vlc3Q=");
        try {
            HttpResponse httpResponse = httpClient.execute(httpGet);
            String res = EntityUtils.toString(httpResponse.getEntity());
        } catch (Exception e) {
            LOGGER.warn("http client fail", e);
            return null;
        }

發佈了308 篇原創文章 · 獲贊 69 · 訪問量 79萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章