HTTP Basic Authentication

閱讀時間約 3 分鐘
一般在做使用者登入認證,會用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解密後比對帳密是否正確,決定要不要回傳資料給前端。
為什麼會看到廣告
20會員
161內容數
留言0
查看全部
發表第一個留言支持創作者!
Vic Lin的沙龍 的其他內容
使用Minikube安裝Kubernetes
閱讀時間約 6 分鐘
將Docker image部屬到Minikube
閱讀時間約 5 分鐘
使用K8S Deployment來部屬App
閱讀時間約 9 分鐘
K8S 內部App之間的連線
閱讀時間約 10 分鐘
Strategy Design Pattern
閱讀時間約 3 分鐘
你可能也想看
創作者要怎麼好好休息 + 避免工作過量?《黑貓創作報#4》午安,最近累不累? 這篇不是虛假的關心。而是《黑貓創作報》發行以來可能最重要的一篇。 是的,我們這篇講怎麼補充能量,也就是怎麼休息。
Thumbnail
avatar
黑貓老師
2024-06-29
防曬產品係數測試報告彙整(2024年)從2014年起,自己對於市售防曬產品的效能產生了濃厚的興趣。因為當時候發現不少產品的防曬係數其實標示是有問題的,像是原本應該是人體測試的SPF與PA數值,實際上沒有做,只用機器測試的數據來充當,但這兩者卻有很大的差異。像是防曬係數其實有強度、廣度與平均度三個面向需要一起判斷,但多數廠商並沒有完整標示
Thumbnail
avatar
邱品齊皮膚科醫師
2023-04-27
HTTP、HTTPSHTTP(Hyper Text Transfer Protocol,超文字傳輸協定) 通常執行在TCP協定上。請求和回傳訊息的頭是ASCII,而內容是MIME。 HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer) 以HT
avatar
小黑
2024-06-01
核心模組 - http.createServer() | Node.js透過 node 的 http 模組來建立 web 伺服器範例
Thumbnail
avatar
阿榮
2024-03-23
[HTTP]狀態碼資訊回應(Informational responses) 100~199 100(Continue):伺服器在等待用戶端繼續請求。 102(Processing):伺服器收到請求正在處理中。 成功回應(Successful responses) 200~299 200(OK):請求
Thumbnail
avatar
小黑
2024-01-02
[HTTP]標頭資訊Accept:用戶端能夠接收的內容類型。 Accept: text/plain, text/html Accept-Charset:瀏覽器可以接受的字元編碼集。 Accept-Charset: utf8 Accept-Encoding:指定瀏覽器可以支援的web伺服器返回內容壓縮編碼
Thumbnail
avatar
小黑
2024-01-02
[Go]net/HTTP封包HTTP伺服器端 package main import ( "net/http" ) type Refer struct { handler http.Handler refer string } //實現中介軟體邏輯​ func (this *Refer) ServeHTTP(
Thumbnail
avatar
小黑
2024-01-01
HTTP-3A S2 飛行導控技術混合式火箭成功升空   時隔2年,2022年7月10日上午6點12分,HTTP-3A S2 火箭成功升空,完成HTTP-3A火箭計畫的第二階段飛行測試項目。雖然飛行高度不高,但主要測試目的已達成。
Thumbnail
avatar
ARRC
2022-07-24
HTTP-3AT計畫 混合式火箭的繫留懸浮飛行測試This is Hybrid Rocket Science! 2020年 8月20日是個值得紀念的一刻,歷時五個月,開了不下十次的測試前會議、測試後檢討會議,一次又一次,我們嚐到了失敗的苦澀,但我們會失望卻不會絕望,終於,在第五次的繫留懸浮飛行測試測中,成功的讓火箭穩定在空中起飛並降落。
Thumbnail
avatar
ARRC
2020-09-06
HTTP-3A 火箭第二節第一次垂直地面測試!2019/11/22 ARRC進行第一次HTTP-3A火箭第二節 四組混合式火箭引擎的垂直地面測試!  測試項目包含推力向量與推力節流控制測試,下一個目標就是要離開地面了~GOGO
Thumbnail
avatar
ARRC
2019-11-23
HTTP-3A計畫 降落傘回收系統測試-1專題生:來這邊不只設計火箭還可以學裁縫耶~XD > 降落傘回收系統-導引降落傘空投測試 (Parachute Recovery System - Pilot chute test) 目前最常見的火箭回收系統以降落傘回收系統為主,最主要的原因就在於系統簡單且輕巧可靠。 此次測試的是傘型較小的導引傘,
Thumbnail
avatar
ARRC
2019-05-12
HTTP-3A計畫 推力方向控制引擎-3 (24秒與40秒測試) HTTP-3A計畫 第一節與第二節推力方向控制引擎: 地面120公斤推力等級 H2O2引擎。 H2O2/Plastics 混合式火箭引擎第八次測試,測試40秒。 推力控制測試目標,完美達成。過去幾個禮拜,花了不少時間確認設計參數,下一步就是任務目標60秒了!
Thumbnail
avatar
ARRC
2019-05-04