謹以此文獻給那些需要實現HTTP AUTH的“程序猿”們。
關於HTTP AUTH的文檔不多。
RFC在 http://www.ietf.org/rfc/rfc2617.txt
wiki在 http://en.wikipedia.org/wiki/Basic_access_authentication
使用HTTP AUTH需要在server端配置http auth信息(一般是webserver啓動的時候從配置文件裏面讀取相關信息)。我用中文簡述一下http auth的過程:
- 客戶端發送http請求
- 服務器發現配置了http auth,於是檢查request裏面有沒有"Authorization"的http header
- 如果有,則判斷Authorization裏面的內容是否在用戶列表裏面,Authorization header的典型數據爲"Authorization: Basic jdhaHY0=",其中Basic表示基礎認證, jdhaHY0=是base64編碼的"user:passwd"字符串。
- 如果沒有,或者用戶密碼不對,則返回http code 401頁面給客戶端
- 標準的http瀏覽器在收到401頁面之後,應該彈出一個對話框讓用戶輸入帳號密碼;並在用戶點確認的時候再次發出請求,這次請求裏面將帶上Authorization header
一次典型的訪問場景是:
- 瀏覽器發送http請求(沒有Authorization header)
- 服務器端返回401頁面
- 瀏覽器彈出認證對話框
- 用戶輸入帳號密碼,並點確認
- 瀏覽器再次發出http請求(帶着Authorization header)
- 服務器端認證通過,並返回頁面
- 瀏覽器顯示頁面
使用http auth的場景不會用cookie,也就是說每次都會送帳號密碼信息過去。然後我們都知道base64編碼基本上等於明文。這削弱了安全。
由於種種缺點,http auth現在用的並不多。不過在路由器等場合還是有應用的,原因是http auth最簡單,使用起來幾乎是零成本。
在你需要做訪問控制,又不想拖上SSO、數據庫之類的東西的時候,http auth不失爲一個簡潔的選項。
文章轉自:http://blog.csdn.net/wwwsq/article/details/7255062
感謝博主的無私分享!