濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 基于Token的身份驗(yàn)證之JWT基礎(chǔ)教程

基于Token的身份驗(yàn)證之JWT基礎(chǔ)教程

熱門(mén)標(biāo)簽:鄭州中國(guó)移動(dòng)400電話申請(qǐng) 揭陽(yáng)外呼系統(tǒng)公司 無(wú)錫電銷機(jī)器人銷售 招聘信息 地圖標(biāo)注植物名稱 去哪里辦卡 南召400電話辦理資費(fèi) 地圖標(biāo)注審核工作怎么樣注冊(cè) 熱血傳奇沃瑪森林地圖標(biāo)注 福建ai電銷機(jī)器人加盟公司

前言

初次了解JWT,很基礎(chǔ),高手勿噴。

基于Token的身份驗(yàn)證用來(lái)替代傳統(tǒng)的cookie+session身份驗(yàn)證方法中的session。

token應(yīng)用流程為:

1、初次登錄:用戶初次登錄,輸入用戶名密碼。

2、密碼驗(yàn)證:服務(wù)器從數(shù)據(jù)庫(kù)取出用戶名和密碼進(jìn)行驗(yàn)證。

3、生成JWT:服務(wù)器端驗(yàn)證通過(guò),根據(jù)從數(shù)據(jù)庫(kù)返回的信息,以及預(yù)設(shè)規(guī)則,生成JWT。

4、返還JWT:服務(wù)器的HTTP RESPONSE中將JWT返還。

5、帶JWT的請(qǐng)求:以后客戶端發(fā)起請(qǐng)求,HTTP REQUEST HEADER中的Authorization字段都要有值,為JWT,用來(lái)驗(yàn)證用戶身份以及對(duì)路由,服務(wù)和資源的訪問(wèn)權(quán)限進(jìn)行驗(yàn)證。請(qǐng)求驗(yàn)證的url可以例如:http://127.0.0.1:8083/change/goodsMenu? token=JWT

JWT是啥?

JWT就是一個(gè)字符串,經(jīng)過(guò)加密處理與校驗(yàn)處理的字符串,形式為:

A.B.C

A由JWT頭部信息header加密得到

B由JWT用到的身份驗(yàn)證信息json數(shù)據(jù)加密得到

C由A和B加密得到,是校驗(yàn)部分

怎樣生成A?

header格式為:

{
 "typ": "JWT",
 "alg": "HS256" 
}

它就是一個(gè)json串,兩個(gè)字段是必須的,不能多也不能少。alg字段指定了生成C的算法,默認(rèn)值是HS256

將header用base64加密,得到A

通常,JWT庫(kù)中,可以把A部分固定寫(xiě)死,用戶最多指定一個(gè)alg的取值

怎樣計(jì)算B?

根據(jù)JWT claim set[用base64]加密得到的。claim set是一個(gè)json數(shù)據(jù),是表明用戶身份的數(shù)據(jù),可自行指定字段很靈活,也有固定字段表示特定含義(但不一定要包含特定字段,只是推薦)。

這里偷懶,直接用php中的代碼來(lái)表示claim set了,重在說(shuō)明字段含義:

$token = array(
 "iss" => "http://example.org", #非必須。issuer 請(qǐng)求實(shí)體,可以是發(fā)起請(qǐng)求的用戶的信息,也可是jwt的簽發(fā)者。
 "iat" => 1356999524,    #非必須。issued at。 token創(chuàng)建時(shí)間,unix時(shí)間戳格式
 "exp" => "1548333419",   #非必須。expire 指定token的生命周期。unix時(shí)間戳格式
 "aud" => "http://example.com", #非必須。接收該JWT的一方。
 "sub" => "jrocket@example.com", #非必須。該JWT所面向的用戶
 "nbf" => 1357000000, # 非必須。not before。如果當(dāng)前時(shí)間在nbf里的時(shí)間之前,則Token不被接受;一般都會(huì)留一些余地,比如幾分鐘。
 "jti" => '222we',  # 非必須。JWT ID。針對(duì)當(dāng)前token的唯一標(biāo)識(shí)

 "GivenName" => "Jonny", # 自定義字段
 "Surname" => "Rocket", # 自定義字段
 "Email" => "jrocket@example.com", # 自定義字段
 "Role" => ["Manager", "Project Administrator"] # 自定義字段
);

JWT遵循RFC7519,里面提到claim set的json數(shù)據(jù)中,自定義字段的key是一個(gè)string,value是一個(gè)json數(shù)據(jù)。因此隨意編寫(xiě)吧,很靈活。

個(gè)人初學(xué),認(rèn)為一個(gè)最基本最簡(jiǎn)單最常用的claim set為:

$token=array(
 "user_id" => 123456, #用戶id,表明用戶
 "iat" => 1356999524, #token發(fā)布時(shí)間
 "exp" => 1556999524, #token過(guò)期時(shí)間
);

將claim set加密后得到B,學(xué)名payload

怎樣計(jì)算C?

將A.B使用HS256加密(其實(shí)是用header中指定的算法),當(dāng)然加密過(guò)程中還需要密鑰(自行指定的一個(gè)字符串)。
加密得到C,學(xué)名signature,其實(shí)就是一個(gè)字符串。作用類似于CRC校驗(yàn),保證加密沒(méi)有問(wèn)題。

好了,現(xiàn)在A.B.C就是生成的token了。

怎樣使用token?

可以放到HTTP請(qǐng)求的請(qǐng)求頭中,通常是Authorization字段。
也有人說(shuō)放到cookie。不過(guò)移動(dòng)端app用cookie似乎不方便。

token應(yīng)用流程?

初次登錄:用戶初次登錄,輸入用戶名密碼

密碼驗(yàn)證:服務(wù)器從數(shù)據(jù)庫(kù)取出用戶名和密碼進(jìn)行驗(yàn)證

生成JWT:服務(wù)器端驗(yàn)證通過(guò),根據(jù)從數(shù)據(jù)庫(kù)返回的信息,以及預(yù)設(shè)規(guī)則,生成JWT

返還JWT:服務(wù)器的HTTP RESPONSE中將JWT返還

帶JWT的請(qǐng)求:以后客戶端發(fā)起請(qǐng)求,HTTP REQUEST HEADER中的Authorizatio字段都要有值,為JWT

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • SpringBoot集成JWT實(shí)現(xiàn)token驗(yàn)證的流程
  • php實(shí)現(xiàn)JWT(json web token)鑒權(quán)實(shí)例詳解
  • Laravel (Lumen) 解決JWT-Auth刷新token的問(wèn)題
  • thinkphp框架使用JWTtoken的方法詳解
  • Java中使用JWT生成Token進(jìn)行接口鑒權(quán)實(shí)現(xiàn)方法
  • 詳解JWT token心得與使用實(shí)例
  • koa+jwt實(shí)現(xiàn)token驗(yàn)證與刷新功能
  • Django JWT Token RestfulAPI用戶認(rèn)證詳解
  • spring boot+jwt實(shí)現(xiàn)api的token認(rèn)證詳解
  • JWT Token實(shí)現(xiàn)方法及步驟詳解

標(biāo)簽:宣城 黔南 鹽城 東莞 景德鎮(zhèn) 文山 桂林 南昌

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于Token的身份驗(yàn)證之JWT基礎(chǔ)教程》,本文關(guān)鍵詞  基于,Token,的,身份,驗(yàn)證,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于Token的身份驗(yàn)證之JWT基礎(chǔ)教程》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于基于Token的身份驗(yàn)證之JWT基礎(chǔ)教程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    新丰县| 曲阳县| 静安区| 古蔺县| 淳化县| 罗山县| 通州市| 杭锦后旗| 买车| 松滋市| 津南区| 海阳市| 伽师县| 南通市| 凌云县| 区。| 丘北县| 湖州市| 克山县| 海城市| 绩溪县| 汉源县| 渭源县| 马边| 界首市| 三门县| 廊坊市| 游戏| 临高县| 沅江市| 固阳县| 务川| 山东省| 平利县| 喜德县| 遂川县| 印江| 神池县| 吴江市| 获嘉县| 江口县|