Node JWT/jsonwebtoken 使用與原理分析

JWT 是一個方便的一種實現服務器與客服端安全通訊的一種規范方案,當然基于 JWT 的概念自
己可以實現安全的加密方案,另外也可以重復造一些輪子。

1.安裝

$ npm install jsonwebtoken --save

2.我們先來看加密與解密方法:

const jwt = require('jsonwebtoken');
const secret = 'aaa'; //撒鹽:加密的時候混淆

   //jwt生成token
 const token = jwt.sign({
     name: 123
  }, secret, {
     expiresIn:  60 //秒到期時間
  });
console.log(token);
//解密token
jwt.verify(token, secret, function (err, decoded) {
    if (!err){
          console.log(decoded.name);  //會輸出123,如果過了60秒,則有錯誤。
     }
})

我們看看jwt.sign 生成的token:
【eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoxMjMsImlhdCI6MTQ5MTQ3NTQyNCwiZXhwIjoxNDkxNDc1NDg0fQ.hYNC4qFAyhZClmPaLixfN137d41R2CFk1xPlfLK10JU】

我們仔細看這字符串,分為三段。分別被 "." 隔開。
我們對:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 由 base64 解密得到
{"alg":"HS256","typ":"JWT"} alg 是加密算法名字,typ 是類型

這段: eyJuYW1lIjoxMjMsImlhdCI6MTQ5MTQ3NTQyNCwiZXhwIjoxNDkxNDc1NDg0fQ 由base64解密得到: {"name":123,"iat":1491475424,"exp":1491475484} name 是我們儲存的內容,但是多了 iat(創建的時間戳),exp(到期時間戳)。

最后一段是hYNC4qFAyhZClmPaLixfN137d41R2CFk1xPlfLK10JU,是由前面倆段字符串
HS256 加密后得到。 所以前面的任何一個字段修改,都會導致加密后的字符串不匹配。

我們只有在登陸的時候下發 token,瀏覽器在 cookie 里存儲 token 任何人修改,都會導致服務器匹配不上。

個人博客: http://www.liangtongzhuo.com

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容