基於Token的身份驗證 JWT

2021-09-22 17:11:25 字數 2125 閱讀 6119

初次了解jwt,很基礎,高手勿噴。

基於token的身份驗證用來替代傳統的cookie+session身份驗證方法中的session。

jwt就是乙個字串,經過加密處理與校驗處理的字串,形式為:

a.b.c

a由jwt頭部資訊header加密得到

b由jwt用到的身份驗證資訊json資料加密得到

c由a和b加密得到,是校驗部分

header格式為:

它就是乙個json串,兩個欄位是必須的,不能多也不能少。alg字段指定了生成c的演算法,預設值是hs256

將header用base64加密,得到a

通常,jwt庫中,可以把a部分固定寫死,使用者最多指定乙個alg的取值

根據jwt claim set[用base64]加密得到的。claim set是乙個json資料,是表明使用者身份的資料,可自行指定欄位很靈活,也有固定字段表示特定含義(但不一定要包含特定字段,只是推薦)。

這裡偷懶,直接用php中的**來表示claim set了,重在說明字段含義:

$token = array

("iss" => ""

,#非必須。issuer 請求實體,可以是發起請求的使用者的資訊,也可是jwt的簽發者。

"iat" => 1356999524

,#非必須。issued at。 token建立時間,unix時間戳格式

"exp" => "1548333419"

,#非必須。expire 指定token的生命週期。unix時間戳格式

"aud" => ""

,#非必須。接收該jwt的一方。

"sub" => "[email protected]"

,#非必須。該jwt所面向的使用者

"nbf" => 1357000000

,# 非必須。not before。如果當前時間在nbf裡的時間之前,則token不被接受;一般都會留一些餘地,比如幾分鐘。

"jti" => '222we'

,# 非必須。jwt id。針對當前token的唯一標識

"givenname" => "jonny"

,# 自定義字段

"surname" => "rocket"

,# 自定義字段

"email" => "[email protected]"

,# 自定義字段

"role" => [

"manager"

,"project administrator"

]# 自定義字段

);

jwt遵循rfc7519,裡面提到claim set的json資料中,自定義欄位的key是乙個string,value是乙個json資料。因此隨意編寫吧,很靈活。

個人初學,認為乙個最基本最簡單最常用的claim set為:

$token=array(

"user_id" => 123456, #使用者id,表明使用者

"iat" => 1356999524, #token發布時間

"exp" => 1556999524, #token過期時間

);

將claim set加密後得到b,學名payload

a.b使用hs256加密(其實是用header中指定的演算法),當然加密過程中還需要金鑰(自行指定的乙個字串)。

加密得到c,學名signature,其實就是乙個字串。作用類似於crc校驗,保證加密沒有問題。

好了,現在a.b.c就是生成的token了。

初次登入:使用者初次登入,輸入使用者名稱密碼

密碼驗證:伺服器從資料庫取出使用者名稱和密碼進行驗證

生成jwt:伺服器端驗證通過,根據從資料庫返回的資訊,以及預設規則,生成jwt

返還jwt:伺服器的http response中將jwt返還

帶jwt的請求:以後客戶端發起請求,http request header中的authorizatio欄位都要有值,為jwt

基於Token的身份驗證 JWT

原文 基於token的身份驗證 jwt 初次了解jwt,很基礎,高手勿噴。基於token的身份驗證用來替代傳統的cookie session身份驗證方法中的session。jwt就是乙個字串,經過加密處理與校驗處理的字串,形式為 a.b.c a由jwt頭部資訊header加密得到 b由jwt用到的身...

基於Token的身份驗證 JWT

初次了解jwt,很基礎,高手勿噴。基於token的身份驗證用來替代傳統的cookie session身份驗證方法中的session。jwt就是乙個字串,經過加密處理與校驗處理的字串,形式為 a.b.c a由jwt頭部資訊header加密得到 b由jwt用到的身份驗證資訊json資料加密得到 c由a和...

基於Token的身份驗證 JWT

初次了解jwt,很基礎,高手勿噴。基於token的身份驗證用來替代傳統的cookie session身份驗證方法中的session。jwt就是乙個字串,經過加密處理與校驗處理的字串,形式為 a.b.c a由jwt頭部資訊header加密得到 b由jwt用到的身份驗證資訊json資料加密得到 c由a和...