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