在分散式中,session如何共用,用戶登陸要解決的問題如下圖所示,通過nignx請求轉發,到不同的應用模塊中,需要判斷用戶有沒有登陸驗證通過,問題又來了,app的移動端不像瀏覽器,沒有cookie,session,那麼怎麼搞呢?這時可以使用session外置方式解決,用redis統一管理sessi ...
在分散式中,session如何共用,用戶登陸要解決的問題如下圖所示,通過nignx請求轉發,到不同的應用模塊中,需要判斷用戶有沒有登陸驗證通過,問題又來了,app的移動端不像瀏覽器,沒有cookie,session,那麼怎麼搞呢?這時可以使用session外置方式解決,用redis統一管理session,用redis來模擬session。瀏覽器的session都是有狀態的,但是移動端的session都是無狀態的,不創建session,我們通過用戶登陸時生成一個token(session) ,token存在redis設置超時,用戶每次請求都帶著token到服務端做校驗,token代表唯一用戶,如何保密?
解決的辦法就是登陸獲取token的時候,傳輸的時候要加密,那用什麼加密呢?MD5是一種數字簽名,不可逆的,明顯行不通,因為沒辦法反解密。那麼如果用對稱加密演算法AES呢?,AES優點在於效率高,這樣就安全了嗎?明顯不可以,因為網路傳輸的時候你加密的key是可以被人截獲破解的,安全性依賴於key。那麼試想如果用非對稱加密RSA呢,用公鑰+明文加密=密文。傳輸給服務端,服務端保存著非對稱的私鑰,用私鑰+密文=明文,就算被截獲了公鑰,也沒用,因為沒有私鑰,私鑰保存在服務端,這固然已經事很高的安全性了,但是又面臨有個問題,這種加密方式效率性極差。這固然不行的,但是如果通過非對稱RSA公鑰加密對稱加密AES的key,再用RSA的私鑰解密AES的key,再用得到的key,進行對稱解密。這樣問題,引刃而解了。而且最後那種方案的公鑰和私鑰都是動態的生成的。這已經安全性很高了。要破解,成本已經很高了。