筆記單機和分散式應用下的登入校驗,session共享,分散式快取應用
1、單機tomcat應用登入校驗
session儲存在瀏覽器和應用伺服器會話之間
使用者登入成功,服務端會保證一個session,當然會給客戶端一個sessionId。
客戶端會把sessionid儲存在cookie中,每次請求都會攜帶這個sessionId。
2、分散式應用中session共享
真實的應用不可能是單節點部署,所以就有個多節點登入session共享的問題需要解決
1)tomcat支援session共享,但是有廣播風暴;使用者量大的時候,佔用資源就越嚴重,不推薦。
2)使用redis儲存token:
服務端使用UUID生成隨機64位或者128位token,讓如redis,然後返回給客戶端並存儲在cookie中,使用者每次訪問都攜帶此token,服務端去redis中校驗是否有此使用者即可。
3、微服務下登入校驗解決方案JWT (json wen token)
1、JWT是一個開放標準,它定義了一種用於簡潔,自包含的用於通訊雙方之間以JSON物件的形式安全傳遞資訊的方法。
JWT可以使用HMAC演算法或是RSA的公鑰祕鑰對進行簽名。
簡單來說,就是通過一定規範來生成token,然後可以通過解密演算法逆向解密token,這樣就可以獲取使用者資訊。
優點:
1)生產的token可以包含基本資訊,比如ID,使用者暱稱、頭像等資訊,避免再次查庫
2)儲存在客戶端,不佔用服務端的記憶體資源
缺點:
token是經過base64編碼,所以可以解碼,因此token加密前的物件不應該包含敏感資訊如使用者許可權、密碼等。
2、JWT格式組成 頭部、負載、簽名
header + payload + signature
頭部:主要是描述簽名演算法
負載:主要描述的是加密物件的資訊,如使用者的id等,也可以加些規範裡面的東西,如iss簽發者,exp 過期時間,sub面向的使用者
簽名:主要是把前面兩部分進行加密,防止別人拿到token進行base解密後篡改token
3、關於JWT客戶端儲存
可以儲存在cookie,localstorage和sessionStorage裡面