把認證信息保存在客戶端,關鍵點就是安全的驗證,如果能解決認證信息的安全性問題,完全可以把認證信息保存在客戶端,服務端完全無認證狀態,這樣的話服務端擴展起來要方便很多。關於信息的安全解決方案,現在普遍的做法就是簽名機制,像微信公眾接口的驗證方式就基於簽名機制。簽名,就是只有信息的發送者才能產生的別人無法偽造的壹段數字串,這段數字串同時也是對信息的發送者發送信息真實性的壹個有效證明。當用戶成功登系統並成功驗證有效之後,服務器會利用某種機制產生壹個token字符串,這個token中可以包含很多信息,例如來源IP,過期時間,用戶信息等, 把這個字符串下發給客戶端,客戶端在之後的每次請求
中都攜帶著這個token,攜帶方式其實很自由,無論是cookie方式還是其他方式都可以,但是必須和服務端協商壹致才可以。當然這裏我不推薦cookie。當服務端收到請求,取出token進行驗證(可以驗證來源ip,過期時間等信息),如果合法則允許進行操作。基於token的驗證方式也是現代互聯網普通使用的認證方式,那它有什麽優點
1.支持跨域訪問,Cookie是不允許垮訪問的,這壹點對Token機制是不存在的,前提是傳輸的用戶認證信息通過HTTP頭傳輸.
2.無狀態:Token機制在服務端不需要存儲session信息,因為Token自身包含了所有登錄用戶的信息,只需要在客戶端的cookie或本地介質存儲狀態信息.
3.解耦 不需要綁定到壹個特定的身份驗證方案。Token可以在任何地方生成,只要在妳的API被調用的時候,妳可以進行Token生成調用即可.
4.適用性更廣:只要是支持http協議的客戶端,就可以使用token認證。
5.服務端只需要驗證token的安全,不必再去獲取登錄用戶信息,因為用戶的登錄信息已經在token信息中。
6.基於標準化:妳的API可以采用標準化的 JSON Web Token (JWT). 這個標準已經存在多個後端庫(.NET, Ruby, Java,Python,PHP)和多家公司的支持(如:Firebase,Google, Microsoft).