JWT是json web token縮寫
它將用戶信息加密到token里,服務(wù)器不保存任何用戶信息;服務(wù)器通過使用保存的密鑰驗(yàn)證token的正確性,只要正確即通過驗(yàn)證;基于token的身份驗(yàn)證可以替代傳統(tǒng)的cookie域携、session身份驗(yàn)證方法。
JWT優(yōu)點(diǎn):
- 服務(wù)端不需要保存?zhèn)鹘y(tǒng)會(huì)話信息鱼喉,沒有跨域傳輸問題秀鞭,減小服務(wù)器開銷
- jwt構(gòu)成簡單,占用很少的字節(jié)扛禽,便于傳輸
- json格式通用锋边,不同語言之間都可以使用
JWT由三部分組成:
- 頭部(header)alg字段指定了生成signature的算法,默認(rèn)值為HS256旋圆,typ默認(rèn)值為JWT:
{
"alg": "HS256",
"typ": "JWT"
}
- 載荷(payload)包含一些定義信息和自定義信息(sub 面向的用戶宠默,name 姓名 ,iat 簽發(fā)時(shí)間):
{
"sub": "abcdefg",
"name": "wuji",
"iat": 17520496732
}
- 簽證(signature)對(duì)header和payload進(jìn)行base64UrlEncode編碼后進(jìn)行拼接。通過key(這里是345678)進(jìn)行HS256算法簽名:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
345678
)
用戶登錄鑒權(quán)流程:
- 初次登錄:用戶使用用戶名密碼來請求服務(wù)器
- 密碼驗(yàn)證:服務(wù)器從數(shù)據(jù)庫取出用戶名和密碼進(jìn)行驗(yàn)證
- 生成與返還JWT:服務(wù)器通過驗(yàn)證灵巧,根據(jù)從數(shù)據(jù)庫返回的信息搀矫,以及預(yù)設(shè)規(guī)則,生成JWT刻肄,發(fā)送給用戶一個(gè)token
- 帶JWT的請求:客戶端存儲(chǔ)token瓤球,并在每次請求時(shí)附送上這個(gè)令牌值
- 服務(wù)端驗(yàn)證token,并返回?cái)?shù)據(jù)
流程:
- 提交登錄表單敏弃,發(fā)送用戶名和密碼到后端
- 初始化驗(yàn)證成功后卦羡,會(huì)發(fā)送一個(gè)令牌給前端
- 前端再拿這個(gè)令牌去請求需要用戶權(quán)限訪問
- 后端驗(yàn)證token,鑒權(quán),返回相應(yīng)數(shù)據(jù)(結(jié)果)