缺點雖然基本認證非常容易實現,但是這種方案是基於客戶端和服務器主機之間的連接是安全可靠的假設。特別是,如果沒有SSL/TLS等傳輸層安全協議,明文傳輸的密鑰和密碼很容易被截獲。這種方案也不為服務器返回的信息提供保護。現有的瀏覽器保存認證信息,直到標簽或瀏覽器被關閉或用戶清除歷史。HTTP沒有為服務器提供壹種方法來指示客戶端丟棄這些緩存的鍵。這意味著用戶沒有有效的方法在不關閉瀏覽器的情況下在服務器端註銷。
優點和缺點
會話cookie的缺點
(1)認證方式僅限於瀏覽器,cookie是瀏覽器端的壹種機制。如果是在app端,cookie就無法使用。
(2)為了滿足全局壹致性,我們最好將會話存儲在redis中進行持久化,但是在分布式環境下,我們可能需要在每臺服務器上進行備份,這就占用了大量的存儲空間。
(3)在非Https協議下使用的cookie容易受到CSRF跨站點請求偽造攻擊。
令牌就是令牌。瀏覽器第壹次訪問服務器的時候會頒發壹個令牌,然後每次瀏覽器用這個令牌訪問服務器的時候都會驗證這個令牌是否有效。只要服務器能夠解密令牌,就意味著請求是合法的。通常,令牌由用戶信息、時間戳和使用哈希算法加密的簽名組成。
優勢:
(1)令牌認證不限於cookie,這使得這種認證方式支持多種客戶端,而不僅僅是瀏覽器。並且不受同源策略的影響。
(2)不使用cookie也可以避免CSRF攻擊。
(3)令牌不需要存儲。用戶信息已經包含在令牌中,服務器端變成無狀態。服務器端只需要根據定義的規則檢查令牌是否合法。這也使得token更具可伸縮性。
缺點:
(1)加密和解密的消耗使得令牌認證比會話cookie消耗更多的性能。
(2) token比sessionId大,占用帶寬多。
由於app沒有瀏覽器無法存儲cookie,OAuth就出現了,允許用戶授權第三方網站訪問自己已經存儲在其他服務商的信息。與以往授權方式不同的是,OAuth的授權不會讓第三方接觸到用戶的賬戶信息(如用戶名和密碼),即第三方可以不使用用戶的用戶名和密碼申請對用戶的資源進行授權,因此OAuth是安全的。