NodeJS 使用 jsonwebtoken 創(chuàng)建 JWT 格式的 token 和驗(yàn)證

背景

在 NodeJS web server 項(xiàng)目上,我們需要做登錄驗(yàn)證,通過 用戶名和密碼 換取 token 是常用的方式。

相關(guān)知識

JSON Web Token (JWT) 介紹

它是 一種 JSON 表達(dá)的 token 格式。一個 token 包含了三部分:header,payload,signature。
header 是 token 的一部分,用來存放 token 的類型和編碼方式,通常是使用 base-64 編碼。
payload 包含了信息。你可以存放任一種信息,比如用戶信息,產(chǎn)品信息等。它們都是使用 base-64 編碼方式進(jìn)行存儲。
 signature 包括了 header,payload 和密鑰的混合體。signature 必須安全地保存儲在服務(wù)端。
官網(wǎng)介紹:https://tools.ietf.org/html/rfc7519

(Payload)說明
{ "iss": "Online JWT Builder", 
  "iat": 1416797419, 
  "exp": 1448333419, 
  "aud": "www.example.com", 
  "sub": "jrocket@example.com", 
  "GivenName": "Johnny", 
  "Surname": "Rocket", 
  "Email": "jrocket@example.com", 
  "Role": [ "Manager", "Project Administrator" ] 
}
* iss: 該JWT的簽發(fā)者,是否使用是可選的;
* sub: 該JWT所面向的用戶,是否使用是可選的;
* aud: 接收該JWT的一方,是否使用是可選的;
* exp(expires): 什么時候過期,這里是一個Unix時間戳,是否使用是可選的;
* iat(issued at): 在什么時候簽發(fā)的(UNIX時間),是否使用是可選的;其他還有:
* nbf (Not Before):如果當(dāng)前時間在nbf里的時間之前,則Token不被接受;一般都會留一些余地,比如幾分鐘;,是否使用是可選的;

jsonwebtoken 介紹

它是 JWT 的 NodeJS 的一種實(shí)現(xiàn)。

使用

安裝類庫

npm install jsonwebtoken

導(dǎo)入

var jwt = require('jsonwebtoken');

代碼

    const TokenUtil = {

  sign: function(userName){
    const payload = { userName };
    var token = jwt.sign(payload, privateKey);
    console.log(`token = ${token}`);
    return token;
  },

  verify: function(token){
    var decoded = jwt.verify(token, privateKey);
    // console.log('decoded = '+decoded);
    console.log('decoded = '+JSON.stringify(decoded));
  },

  main: function(){
    let str = this.sign('zhang3');
    this.verify(str);
  }

}

官網(wǎng)地址:https://github.com/auth0/node-jsonwebtoken

參考:

https://github.com/auth0/node-jsonwebtoken
https://tools.ietf.org/html/rfc7519
https://blog.csdn.net/github_35631540/article/details/83898056
http://www.cnblogs.com/xiekeli/p/5607107.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容