0x01 簡(jiǎn)介
Josn web token是一種跨域驗(yàn)證身份的方案旋圆。
0x02 JWT的組成
頭部(header)
{
"alg":"HS256" //alg聲明這個(gè)JWT簽名使用的加密算法臂聋。
"typ":"JWT" //typ聲明token的類型或南。
}
聲明(claims)
{
可自定義如"user":"Asson"等value,也可使用默認(rèn)的value采够,
特別注意iat和exp字段蹬癌,需要針對(duì)性的進(jìn)行修改以免令牌時(shí)間過(guò)期
}
簽名(signature)
簽名為自定義key
頭部信息和聲明以BASE64URL編碼虹茶,簽名使用alg聲明的加密類型將base64url編碼后的頭部.聲明+簽名進(jìn)行加密隅要。最終將這三部分密文中間以.隔開(kāi)蝴罪,形成了數(shù)據(jù)包格式為xxxx.xxxxxxx.xxxxx的JWT。
0x03 工作過(guò)程
- 用戶在用戶端進(jìn)行登錄操作步清,此時(shí)請(qǐng)求包中會(huì)將用戶名和密碼發(fā)送給服務(wù)器
- 服務(wù)器對(duì)用戶名和密碼進(jìn)行校驗(yàn)要门,校驗(yàn)通過(guò)后生成json頭部和聲明,將相關(guān)的用戶信息寫(xiě)入聲明中廓啊,并用指定算法將KEY加密欢搜,從而生成JWT,此時(shí)服務(wù)器并沒(méi)有保存用戶的登錄狀態(tài)信息
- 服務(wù)器通過(guò)響應(yīng)包將JWT返回給用戶端
- 用戶端再次與服務(wù)器進(jìn)行會(huì)話時(shí)谴轮,用戶端會(huì)將JWT寫(xiě)在HTTP請(qǐng)求頭的authorization字段
- 服務(wù)器對(duì)JWT進(jìn)行驗(yàn)證炒瘟,若驗(yàn)證成功,則確認(rèn)用戶的登錄狀態(tài)第步,并返回響應(yīng)包
0x04 利用方式
- 偽造
- 無(wú)秘鑰
- 修改alg為none疮装,刪除簽名粘都,此時(shí)數(shù)據(jù)包為xxx.xxxx.
- 有秘鑰
- 對(duì)應(yīng)修改數(shù)據(jù)后重新加密
- 爆破
- 針對(duì)簽名密匙進(jìn)行爆破
- 配合
- JWT數(shù)據(jù)中存在參數(shù)傳遞接受處理過(guò)程
0x05 如何識(shí)別JWT
- javaweb
- authorization字段
- 數(shù)據(jù)包數(shù)據(jù)格式
本文僅為個(gè)人學(xué)習(xí)時(shí)所作筆記斩个,文中如有錯(cuò)誤,煩請(qǐng)各位師傅批評(píng)指正驯杜,助我進(jìn)步。