更新時間:2023-09-20 來源:黑馬程序員 瀏覽量:
token也可以稱做令牌,一般由uid+time+sign(簽名)+[固定參數(shù)] 組成。token組成各部分釋義如下:
uid: 用戶唯一身份標識
time: 當前時間的時間戳
sign: 簽名, 使用 hash/encrypt 壓縮成定長的十六進制字符串,以防止第三方惡意拼接。
固定參數(shù)(可選): 將一些常用的固定參數(shù)加入到 token 中是為了避免重復查庫。
token在客戶端一般存放于localStorage,cookie,或sessionStorage中。在服務器一般存于數(shù)據(jù)庫中。
token的認證流程:
用戶登錄,成功后服務器返回Token給客戶端。
客戶端收到數(shù)據(jù)后保存在客戶端。
客戶端再次訪問服務器,將token放入headers中 或者每次的請求 參數(shù)中。
服務器端采用filter過濾器校驗。校驗成功則返回請求數(shù)據(jù),校驗失敗則返回錯誤碼。
token可以抵抗csrf,cookie+session不行。
session時有狀態(tài)的,一般存于服務器內(nèi)存或硬盤中,當服務器采用分布式或集群時,session就會面對負載均衡問題。負載均衡多服務器的情況,不好確認當前用戶是否登錄,因為多服務器不共享session。
客戶端登陸傳遞信息給服務端,服務端收到后把用戶信息加密(token)傳給客戶端,客戶端將token存放于localStroage等容器中。客戶端每次訪問都傳遞token,服務端解密token,就知道這個用戶是誰了。通過cpu加解密,服務端就不需要存儲session占用存儲空間,就很好的解決負載均衡多服務器的問題了。這個方法叫做JWT(Json Web Token)。