初次了解jwt,很基礎,高手勿噴。
基於token的身份驗證用來替代傳統的cookie+session身份驗證方法中的session。
jwt就是乙個字串,經過加密處理與校驗處理的字串,形式為:
a.b.ca由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和...