2020-10-02|閱讀時間 ‧ 約 4 分鐘

HTTP Basic Authentication

一般在做使用者登入認證,會用cookie/session的方式來達到驗證的目的,可參考這篇: 從PHP了解cookie/session原理
而HTTP基本認證是另一種很簡單的驗證方式,所有瀏覽器都支援,也是桌面應用程式常用的認證方式。
HTTP基本認證,其實就是在request header中加入 Authorization 這個 key,value由 Basic 空格 帳號:密碼 組成,其中帳號:密碼是使用base64加密後的。 由server端解密後比對帳密是否正確。
以下以PHP為例來模擬: 程式碼如下:
只要按下登入,不論帳密正確與否,瀏覽器會重新訪問此頁面,假如驗證帳密錯誤,會重新跳出此輸入帳密視窗,假如驗證帳密正確,則跑進else區塊。(仔細研究程式碼即可了解)
1. 故意輸入錯誤的帳密:
按下登入後,重新跳出此視窗要求輸入:
2. 假如輸入帳密正確,按下登入,瀏覽器就會再發送一次request,這時候因為認證成功,就會進入到else區塊(L21):
上圖紅框中的dXNlcjE6MTIzNDU2就是user1:123456這串字串使用base64 加密後的結果。
值得注意的是,一旦認證成功後,重新整理頁面,就不用再輸入一次帳密了,因為往後的request header都會自動帶上 Authorization: Basic dXNlcjE6MTIzNDU2了,所以$_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'] 可以拿到帳密! 但若把瀏覽器關掉重新連線的話,就要重新輸入了。
3. 若按下取消,程式碼會繼續往下執行,因此瀏覽器會echo出「請輸入帳號與密碼」,如下圖:
由上述可知,HTTP基本認證是把帳密透過base64演算法加密,因此很容易被駭客偷取解密而得知帳密,因此一般會在有https的情況下使用。
由於HTTP的無狀態特性,HTTP基本認證也常被使用在Rest API中,前端透過ajax存取後端service時,每次的request都需要在header中加入「Authorization: Basic xxx」,service則會將xxx解密後比對帳密是否正確,決定要不要回傳資料給前端。
分享至
成為作者繼續創作的動力吧!
小弟是一位軟體工程師,樂於幫助他人,撰寫技術文章除了幫助自己複習以外,也希望可以幫助到他人,若文章內容有誤,還請大大不吝給予指教!
© 2024 vocus All rights reserved.