溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

jsonwebtoken如何生成與解析token

發(fā)布時(shí)間:2021-07-19 11:35:57 來源:億速云 閱讀:1047 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要講解了“jsonwebtoken如何生成與解析token”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“jsonwebtoken如何生成與解析token”吧!

        之前寫了一篇介紹token的文章:簡(jiǎn)單理解Token機(jī)制,token算法自己設(shè)計(jì)的,使用了隨機(jī)算法,導(dǎo)致token無法進(jìn)行反向解密。所以我當(dāng)初使用了redis進(jìn)行存儲(chǔ)token,前端調(diào)用API時(shí)需要攜帶token進(jìn)行身份驗(yàn)證,token有效期48小時(shí)。但是我們有說過:sessionid是需要空間進(jìn)行存儲(chǔ)的,但是token服務(wù)器是可以不需要存儲(chǔ)用戶信息的。所以我們能不能做到用戶注冊(cè)登陸成功給用戶生成一個(gè)token返回給客戶端,等前端攜帶token調(diào)用API時(shí)我們直接解析token看能否解析出用戶數(shù)據(jù)來決定用戶是否有接口權(quán)限呢?事實(shí)上NodeJS提供的一個(gè)npm包:jsonwebtoken就可以實(shí)現(xiàn)token的生成與反向解密出用戶數(shù)據(jù)。接下來我們看看jsonwentoken如何進(jìn)行使用。

首先先全局安裝一個(gè)express-generator,命令為:

npm install -g express-generator

然后使用express-generator快速搭建一個(gè)express項(xiàng)目,命令為:

express express_demo

然后進(jìn)入項(xiàng)目并且安裝express項(xiàng)目所需依賴,命令為:

cd express_demo && npm install

到這里項(xiàng)目搭建成功了,我們可以看看項(xiàng)目結(jié)構(gòu):

jsonwebtoken如何生成與解析token

首先在util下創(chuàng)建common.js,該文件主要放置常用公共方法,這里我目前只有兩個(gè)公共方法:paramAll(用來獲取前端傳來的參數(shù)),encryPassword(對(duì)密碼拼接字符串進(jìn)行MD5加密)。

jsonwebtoken如何生成與解析token

可以看到第一行導(dǎo)入crypto依賴,MD5加密需要使用到這個(gè)包,所以我們先裝下這個(gè)依賴,命令為:

npm install --save-dev crypto

然后在util下創(chuàng)建bootloader.js,主要封裝幾個(gè)全局函數(shù),用來輸出測(cè)試數(shù)據(jù)以及給前端返回?cái)?shù)據(jù)使用。

jsonwebtoken如何生成與解析token

然后打開config.js,配置jsonwebtoken生成token所需的secret,secret為加密密鑰,不能泄露給其他人使用。

jsonwebtoken如何生成與解析token

接下來步入正軌了,我們一直說使用jsonwebtoken生成token,那當(dāng)然我們首先安裝下jsonwebtoken,命令為:

npm install --save-dev jsonwebtoken

接下來我們來寫個(gè)接口是線下token的生成,我們接口實(shí)現(xiàn)在router下實(shí)現(xiàn)。首先打開router/users.js,在文件頂部先導(dǎo)入我們剛才編寫的幾個(gè)文件:

jsonwebtoken如何生成與解析token

接下來我們實(shí)現(xiàn)接口,將用戶的基本信息結(jié)合我們?cè)O(shè)置的密鑰secret通過jsonwebtoken生成token:

jsonwebtoken如何生成與解析token

通過我們剛才封裝的paramAll()進(jìn)行過去前端的傳參,密碼是隱私數(shù)據(jù)所以通過封裝好的encryPassword()進(jìn)行MD5加密。然后結(jié)合secret通過jsonwebtoken.sign(info, secret, options)進(jìn)行加密生成token。我們來看下接口效果:

jsonwebtoken如何生成與解析token

可以看到我們成功將用戶信息轉(zhuǎn)化為token了,接下來我們來看看如何反向解析出用戶數(shù)據(jù),解析token使用方法:

jsonwebtoken.verify(token, secret ,callback)

我們實(shí)現(xiàn)一個(gè)接口實(shí)現(xiàn)解析用戶token獲取用戶信息:

jsonwebtoken如何生成與解析token

這里需要注意的一點(diǎn):如果token解析失敗或者token已經(jīng)過期,則都會(huì)返回err,只有正確解析出用戶數(shù)據(jù)才會(huì)返回data。我們可以看下效果:

jsonwebtoken如何生成與解析token

可以看到我們成功把用戶數(shù)據(jù)解析出來,接下來我們可以看看在真正的API接口中我們?nèi)绾稳ナ褂?strong>jsonwebtoken去進(jìn)行token的解析使用。首先我們提到過了接口安全性一般要使用簽名,簽名規(guī)則還是依舊使用我一直使用的規(guī)則:

1.將接口所需參數(shù)加上當(dāng)前時(shí)間戳參數(shù)time,time取毫秒值組裝成json對(duì)象。2.將所有參數(shù)以key=value的形式按照ASCII的順序進(jìn)行排序得到waitSign。3.對(duì)waitSign進(jìn)行MD5加密,得到signParam.4.將signParam轉(zhuǎn)化為純小寫,得到最終的簽名sign。

那接下來我們首先先把生成簽名的算法封裝成公共方法放到common.js中:

jsonwebtoken如何生成與解析token

API接口免不了數(shù)據(jù)庫操作,我們接下來封裝下數(shù)據(jù)庫操作。首先在config.js中配置數(shù)據(jù)庫配置信息:

jsonwebtoken如何生成與解析token

接下來在項(xiàng)目根目錄創(chuàng)建db文件夾,在db下創(chuàng)建mysql.js對(duì)數(shù)據(jù)庫的增刪改查操作進(jìn)行封裝,先封裝連接池初始化以及連接池釋放方法:

jsonwebtoken如何生成與解析token

再封裝一個(gè)用戶插入更新數(shù)據(jù),一個(gè)用于查詢數(shù)據(jù):

jsonwebtoken如何生成與解析token

到這里數(shù)據(jù)庫我們也封裝好了,我們開始寫API實(shí)現(xiàn)用戶登陸,登陸成功生成token。我們看看實(shí)現(xiàn)的代碼:

jsonwebtoken如何生成與解析token

其實(shí)登陸邏輯可以分為三個(gè)步驟:

1.將參數(shù)按照解密規(guī)則加密生成簽名sign2.簽名驗(yàn)證成功,數(shù)據(jù)庫驗(yàn)證賬號(hào)密碼是否匹配3.賬號(hào)密碼匹配生成token與用戶信息一起返回給前端

我將數(shù)據(jù)庫操作封裝到dao層下的users.js下,我們看下登陸數(shù)據(jù)庫的邏輯代碼:

jsonwebtoken如何生成與解析token

到這里登陸邏輯完成了,我們看下接口的調(diào)用效果:

jsonwebtoken如何生成與解析token

調(diào)用成功,會(huì)生成一個(gè)token結(jié)合用戶信息一起返回給前端。我們?cè)賹?shí)現(xiàn)一個(gè)接口查詢用戶個(gè)人積分信息。前端調(diào)用API需要攜帶token進(jìn)行驗(yàn)證個(gè)人信息。

jsonwebtoken如何生成與解析token

本接口一樣分成三個(gè)步驟:

1.將參數(shù)按照解密規(guī)則加密生成簽名sign2.簽名驗(yàn)證成功,解析token驗(yàn)證解析后的用戶賬號(hào)與用戶傳參的賬號(hào)是否一致3.驗(yàn)證成功進(jìn)行數(shù)據(jù)庫操作查詢用戶的積分?jǐn)?shù)據(jù)返回給前端

一樣我們把數(shù)據(jù)庫操作封裝在dao/users.js下,我們可以看下數(shù)據(jù)庫邏輯:

jsonwebtoken如何生成與解析token

我們看下接口調(diào)用效果:

jsonwebtoken如何生成與解析token

可以看到我們成功解析token獲得用戶信息,并查詢到用戶的積分信息。

        其實(shí)在公司前后端交互基本上我們也是采用簽名sign + token + timestamp的驗(yàn)證方式。本篇文章也完成的重現(xiàn)了開發(fā)接口的整個(gè)流程,為了提高代碼可維護(hù)性,我們將一些公共方法全部進(jìn)行了封裝,為后續(xù)的產(chǎn)品迭代增加了更多的可能性。

        本篇文章源碼以及上篇加解密算法源碼已上傳碼云,下載鏈接:

https://gitee.com/mqzuimeng/test_code.git

感謝各位的閱讀,以上就是“jsonwebtoken如何生成與解析token”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)jsonwebtoken如何生成與解析token這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI