前言
大家在登錄網站的時候,大部分時候是通過一個表單提交登錄信息。
但是有時候瀏覽器會彈出一個登錄驗證的對話框,如下圖,這就是使用HTTP基本認證。
說明 HTTP Basic Authentication
在你訪問一個需要HTTP Basic Authentication的URL的時候,如果你沒有提供用戶名和密碼,服務器就會返回401,如果你直接在瀏覽器中打開,瀏覽器會提示你輸入用戶名和密碼,也就是上面的圖示。
要在發送請求的時候添加HTTP Basic Authentication認證信息到請求中,有兩種方法:
一是在請求頭中添加Authorization: Authorization: "Basic 用戶名和密碼的base64加密字符串" 。
二是在url中添加用戶名和密碼。
認證過程:
第一步: 客戶端發送http request 給服務器,服務器驗證該用戶是否已經登錄驗證過了,如果沒有的話,服務器會返回一個401 Unauthozied給客戶端,並且在Response 的 header "WWW-Authenticate" 中添加信息。如下圖。
第二步:瀏覽器在接受到401 Unauthozied后,會彈出登錄驗證的對話框。用戶輸入用戶名和密碼后,瀏覽器用BASE64編碼后,放在Authorization header中發送給服務器。如下圖:
第三步: 服務器將Authorization header中的用戶名密碼取出,進行驗證, 如果驗證通過,將根據請求,發送資源給客戶端,認證結束。
當request第一次到達服務器時,服務器沒有認證的信息,服務器會返回一個401 Unauthozied給客戶端。認證之后將認證信息放在session,以后在session有效期內就不用再認證了。
Http Basic Auth 原理
在HTTP協議進行通信的過程中,HTTP協議定義了基本認證過程以允許HTTP服務器對WEB瀏覽器進行用戶身份認證的方法,當一個客戶端向HTTP服務 器進行數據請求時,
如果客戶端未被認證,則HTTP服務器將通過基本認證過程對客戶端的用戶名及密碼進行驗證,以決定用戶是否合法。
客戶端在接收到HTTP服務器的身份認證要求后,會提示用戶輸入用戶名及密碼, 用戶輸入后,
客戶端將用戶名和密碼中間用“:”分隔合並,並將合並后的字符串用BASE64編碼,在每次請求數據 時,將密文附加於請求頭(Request Header)Authorization: Basic XXXXXXX中。
HTTP服務器在每次收到請求包后,根據協議取得客戶端附加的用戶信息(BASE64編碼的用戶名和密碼),解開請求包,對用戶名及密碼進行驗證,
如果用 戶名及密碼正確,則根據客戶端請求,返回客戶端所需要的數據;否則,返回錯誤代碼或重新要求客戶端提供用戶名及密碼。
參考文檔:https://blog.csdn.net/qq_15783243/article/details/78586699
https://www.cnblogs.com/xiaocandou/p/7991927.html
https://blog.csdn.net/youzhouliu/article/details/52048393
https://blog.csdn.net/jingzhunbiancheng/article/details/80959492