JWT JSON web Token

先了解下幾個名詞:

JWT官網(wǎng)

傳統(tǒng)的基于token的認證

眾所周知,在用戶登錄驗證時,服務端驗證用戶名密碼是否正確,如果驗證通過,則生成一個token發(fā)送給用戶,同時保存這個token到數(shù)據(jù)庫。

JWT

用戶登錄,服務端返回一個token,但是服務端不保存這個token

以后用戶再來訪問,需要攜帶token,服務端基于算法校驗token。


JWT實現(xiàn)過程

看一下一個JWT長什么樣(這是一句,由3段組成,中間小數(shù)點隔開,為了直觀,我在小數(shù)點處換行)

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT-示例.png

第1、2段是通過base64url編碼的,base64url解碼結果如下:

atob('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9')
得到 "{"alg":"HS256","typ":"JWT"}"

atob('eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ')
得到 "{"sub":"1234567890","name":"John Doe","iat":1516239022}"

第3段就有些不同,它的生成步驟如下:

  1. 將第1、2段拼接起來;

  2. 將拼接結果進行加密,加密方法看第一段中有寫,這里是HS256,可以加鹽;

  3. 對HS256加密后的密文再進行base64url編碼。

JWT-第三段.png

校驗流程

用戶再訪問時,如何校驗JWT?

1. 獲取token

從請求體中取出token。

2. 切割token,進行base64url解碼,獲取信息

從header(第1段)中得到加密算法類型,這里假設是HS256。

從payload(第2段),一般我們在最初生成token時會帶上token的過期時間戳,這里我們檢查下過期了沒,如果過期了則直接拒絕請求。

3. 校驗token是否有效

第3段是用來校驗token的,我們把進行

HS256(
    base64Url編碼(header) + '.' +
    base64Url編碼(payload),
    我加的鹽
)

理論上得到的結果應該與第3段完全一致,如果不一致則說明token無效,拒絕請求。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容