關鍵字: web, authentication
什麼是web認證
簡而言之,web認證就是乙個確認對方身份的過程。web認證最典型的方式是通過使用者名稱和密碼。
web認證有多種方式
a. http協議內建的認證方法
1. http basic authentication (http基本認證)
http基本認證是最簡單也是曾經使用過很長時間的一種認證方式。基本認證要求為每乙個保護域(realm)提供乙個使用者名稱和密碼進行認證。
流程簡介:
a. 客戶端瀏覽器訪問乙個受http基本認證保護的資源。
b. 伺服器返回401(authentication required)狀態,要求客戶端提供使用者名稱和密碼進行認證。response header裡面有乙個屬性www-authenticate,它的值比如: basic realm="restlet tutorial"。
c. 客戶端彈出乙個視窗,用於輸入使用者名稱和密碼(基本上所有的瀏覽器都提供對基本認證的支援,它們都內建了乙個使用者名稱密碼輸入視窗)。
d. 輸入使用者名稱密碼並確認之後,客戶端把%username%:%password%用base64進行編碼後通過request header: authorization傳送給伺服器,所以可以看到http基本認證是明文傳輸,安全風險很大。比如authorization: basic *********x.
e. 如果認證成功,則返回相應的資源。如果認證失敗,則跳回b,重新進行認證。
特點:*. http是無狀態的,即使來自同乙個客戶端,對同乙個realm內資源的每乙個訪問還是會被要求進行認證。
*. 客戶端會快取使用者名稱和密碼,並和認證域(authentication realm)一起儲存。所以,如果對同乙個域(realm)的其它資源進行訪問,不需要你重新輸入使用者名稱和密碼。
*. 登入資訊會和認證域以及伺服器名一起儲存,所以可以很好地和其他登入資訊區分開來。
*. 基本認證方式是不安全的,因為使用者名稱密碼以及內容都是以非加密的方式傳輸。
2. digest authentication (摘要式身份認證)
摘要式認證是一種基於challenge-response的認證模式。
流程簡介:
a. 客戶端發起乙個請求(沒有認證資訊)。
b. web伺服器返回乙個帶有www-authenticate頭的response(401),請求提供認證。
c. 客戶端返回使用者名稱和密碼的摘要資訊(比如說md5加密),而不是明文。
d. 通過認證,則返回相應的內容。否則,繼續b。
特點:*. 摘要認證主要是為了解決基本認證中最大的漏洞,即用明文傳輸使用者名稱和密碼的問題。
*. 挑戰模式:每次返回401響應的時候,都會返回乙個nonce(number used only once)。或者,為了安全起見,還可能會使用一次性nounce(每個request都得到乙個不同的nounce)等其它方法來加強安全性。
*. checksum(預設是md5 checksum)是username, password, nonce值, http方法, 和被請求的uri的checksum。
b. form-based
基於form的認證方式是高度可定製,也應該是目前用地最多的一種認證方式。
流程簡介:
1. 客戶端通過乙個form,把使用者名稱和密碼post給服務端。
2. 服務端通過一些邏輯來判斷認證是否有效。
3. 如果認證成功,伺服器返回乙個cookie(乙個能唯一確認客戶端的cookie,比如sessionid),用於客戶端接下來的訪問。如果認證失敗,會提示使用者進行重新輸入使用者名稱密碼再次認證。
特點:*. 高度可定製:可以根據自己的需要來實現認證邏輯。
*. 伺服器端要有乙個儲存客戶端資訊的地方,比如session。
*. 客戶端要有乙個cookie來表明自己的身份,一般是username和乙個cookie值(比如sessionid)的組合。
*. 客戶端cookie的生命週期和安全性息息相關。比如現在很多站點都支援「remember me」,其實就是在伺服器端remember session並在客戶端remember cookie。有些站點為了更好的安全性,用這種方式登入時,如果要執行一些重要的操作比如改密碼,會要求客戶用使用者名稱和密碼的方式重新登入。
c. 證書認證
證書認證方式比之其他方式是最安全的認證方式。
對於數字證書的作用,我在這篇文章
裡面做了詳細介紹。
d. 微軟提供的認證方式
這幾種認證方式都是微軟提供的,不做太多介紹。
1. ntlm,ie only。
2. microsoft passport(single signon).
好了,這篇文章就簡單介紹一下各種認證方式吧。下篇文章,主要討論幾種認證方式在各種伺服器上的實現方式。
web認證方案
web構建在http之上,而它又是無狀態協議,如何控制使用者訪問伺服器上的受限資源呢?最原始你想法通過http基本認證,每次發請求時都向後台傳遞使用者名稱密碼資訊,伺服器每次收到請求後都先驗證使用者是否合法,不安全,效率低。基於session認證,過去大多數系統採用,使用者初次認證後會在服務端生成乙...
web認證機制
以前對認證這方面的認識一直不太深刻,不清楚為什麼需要token這種認證,為什麼不簡單使用session儲存使用者登入資訊等。最近讀了幾篇大牛的部落格才對認證機制方面有了進一步了解。這種認證直接順應http協議的無狀態性,每次執行業務的時候,都暴力地附帶username與password引數,並將其傳...
web認證機制
以前對認證這方面的認識一直不太深刻,不清楚為什麼需要token這種認證,為什麼不簡單使用session儲存使用者登入資訊等。最近讀了幾篇大牛的部落格才對認證機制方面有了進一步了解。這種認證直接順應http協議的無狀態性,每次執行業務的時候,都暴力地附帶username與password引數,並將其傳...