有状态及无状态登录
有狀態(tài)登錄
為了保證客戶端cookie的安全性,服務(wù)端需要記錄每次會話的客戶端信息,從而識別客戶端身份,根據(jù)用戶身份進行請求的處理,典型的設(shè)計如tomcat中的session。
例如登錄:用戶登錄后,我們把登錄者的信息保存在服務(wù)端session中,并且給用戶一個cookie值,記錄對應(yīng)的session。然后下次請求,用戶攜帶cookie值來,我們就能識別到對應(yīng)session,從而找到用戶的信息。
缺點是什么?
-
服務(wù)端保存大量數(shù)據(jù),增加服務(wù)端壓力
-
服務(wù)端保存用戶狀態(tài),無法進行水平擴展
-
客戶端請求依賴服務(wù)端,多次請求必須訪問同一臺服務(wù)器
即使使用redis保存用戶的信息,也會損耗服務(wù)器資源。
?
無狀態(tài)登錄
微服務(wù)集群中的每個服務(wù),對外提供的都是Rest風(fēng)格的接口。而Rest風(fēng)格的一個最重要的規(guī)范就是:服務(wù)的無狀態(tài)性,即:
-
服務(wù)端不保存任何客戶端請求者信息
-
客戶端的每次請求必須具備自描述信息,通過這些信息識別客戶端身份
帶來的好處是什么呢?
-
客戶端請求不依賴服務(wù)端的信息,任何多次請求不需要必須訪問到同一臺服務(wù)
-
服務(wù)端的集群和狀態(tài)對客戶端透明
-
服務(wù)端可以任意的遷移和伸縮
-
減小服務(wù)端存儲壓力
?
無狀態(tài)登錄流程
無狀態(tài)登錄的流程:
-
當客戶端第一次請求服務(wù)時,服務(wù)端對用戶進行信息認證(登錄)
-
認證通過,將用戶信息進行加密形成token,返回給客戶端,作為登錄憑證
-
以后每次請求,客戶端都攜帶認證的token
-
服務(wù)的對token進行解密,判斷是否有效。
流程圖:
整個登錄過程中,最關(guān)鍵的點是什么?
token的安全性
token是識別客戶端身份的唯一標示,如果加密不夠嚴密,被人偽造那就完蛋了。
采用何種方式加密才是安全可靠的呢?
我們將采用JWT + RSA非對稱加密
?
總結(jié)