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