最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

node.js express JWT token生成與校驗的實現(xiàn)

 更新時間:2023年12月13日 10:23:14   作者:SuppperSA  
本文主要介紹了node.js express JWT token生成與校驗的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

JWT

JWT 是輕量級的數(shù)據(jù)交換格式,相對于傳統(tǒng)的 Session 機制,JWT 不需要在服務(wù)器端存儲會話信息,而是將所有必要的信息包含在令牌本身中。

生成驗證流程

用戶賬號密碼注冊或登錄,服務(wù)端用HMACSHA256根據(jù)secret和base64Url編碼后的headerpayload進行加密生成signature,然后將base64Url編碼后的headerpayload以及signature通過“.”相連接,最終形式xxxx.yyyy.zzzz(token),之后用戶每次請求資源的時候?qū)⒃L問令牌token放在請求頭中,服務(wù)端在驗證其是否有效之后,返回相對應(yīng)的資源信息。

header(標頭)

生成token的頭信息,通常由兩部分組成,包含令牌類型alg和所使用的簽名算法typ

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

payload(有效負載)

通常包括生成jwt的非隱私信息,用戶的唯一標識符id,發(fā)行時間iat,到期時間exp

{
  "id": "655c78ccd9107661e41abd9f",
  "iat": 1702260106,
  "exp": 1710036106
}

signature(簽名)

HMAC-SHA256(Hash Message Authentication Code-Secure Hash Algorithm 256 bit)是一種加密算法,是SHA-256散列函數(shù)與一個密鑰結(jié)合的身份驗證方法。HMAC的安全性基于散列函數(shù)(SHA-256),而且可以通過密鑰的添加來增加信任度。此算法經(jīng)常用于網(wǎng)絡(luò)領(lǐng)域中,例如 HTTPS、SSL、SSH 等加密通訊領(lǐng)域。

生成signature:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload), secret
)

訪問令牌(token)

base64UrlEncode(header) + '.' + base64UrlEncode(payload) + '.' + signature

舉例:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1NWM3OGNjZDkxMDc2NjFlNDFhYmQ5ZiIsImlhdCI6MTcwMjI2MDEwNiwiZXhwIjoxNzEwMDM2MTA2fQ.ca-J91WaThntP3IhMBQNps9MVqts8oi_f62KcV2r4D8

express jwt生成、驗證

1、安裝jsonwebtoken依賴,npm install jsonwebtoken --save

2、在代碼controller層引入依賴,在登錄、注冊的時候生成token

//環(huán)境變量,通過安裝dotenv依賴,在express入口文件中加載,
這么做的目的是不讓密鑰等敏感信息硬編碼在代碼中


JWT_SECRET=this-is-my-secret-password
JWT_EXPIRES_IN=90d

生成jwt

// authController.js 用戶的登錄、注冊、密碼修改、token生成、權(quán)限校驗、憑證認證等
const jwt = require('jsonwebtoken');

const signToken = id => {
  return jwt.sign({ id }, process.env.JWT_SECRET, {
    expiresIn: process.env.JWT_EXPIRES_IN
  });
};

驗證jwt

promisify(jwt.verify)(token, process.env.JWT_SECRET);

const { promisify } = require('util'); 

// protect中間件, 用于驗證用戶
exports.protect = catchAsync(async (req, res, next) => {
  let token;
  if (
    req.headers.authorization &&
    req.headers.authorization.startsWith('Bearer')
  ) {
    token = req.headers.authorization.split(' ')[1];
  }

  if (!token) {
    return next(
      new AppError('您還還沒有登錄或注冊', 401)
    );
  }

  // 2) 驗證 token
  const decoded = await promisify(jwt.verify)(token, process.env.JWT_SECRET);
  
  // 驗證jwt是否有效,decode信息是payload,其中包含用戶生成jwt的id、iat、exp
  // 通過這個唯一id可以查詢用戶信息,如果promisify是rejected則進行錯誤處理邏輯
});

到此這篇關(guān)于node.js express JWT token生成與校驗的實現(xiàn)的文章就介紹到這了,更多相關(guān)express JWT token生成與校驗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

您可能感興趣的文章:

相關(guān)文章

  • pnpm實現(xiàn)依賴包共享和依賴包項目隔離的方法詳解

    pnpm實現(xiàn)依賴包共享和依賴包項目隔離的方法詳解

    pnpm是Node.js的包管理器,它是 npm 的直接替代品,相對于npm和yarn它的優(yōu)點就在于速度快和高效節(jié)省磁盤空間,本文主要講解pnpm相比于npm/yarn如何利用軟硬鏈接來節(jié)省磁盤空間,以及如何實現(xiàn)依賴包共享和依賴包項目隔離的,需要的朋友可以參考下
    2024-05-05
  • node.js實現(xiàn)BigPipe詳解

    node.js實現(xiàn)BigPipe詳解

    這篇文章主要介紹了node.js實現(xiàn)BigPipe詳解,BigPipe是 Facebook 開發(fā)的優(yōu)化網(wǎng)頁加載速度的技術(shù),BigPipe 的核心概念就是只用一個 HTTP 請求,只是頁面元素不按順序發(fā)送而已,需要的朋友可以參考下
    2014-12-12
  • 深入理解Node內(nèi)建模塊和對象

    深入理解Node內(nèi)建模塊和對象

    在node核心中有些內(nèi)建模塊,使用這些模塊可以操作系統(tǒng),文件和網(wǎng)絡(luò),這篇文章主要介紹了深入理解Node內(nèi)建模塊和對象,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • nodejs aes 加解密實例

    nodejs aes 加解密實例

    今天小編就為大家分享一篇nodejs aes 加解密實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • node中的Express框架詳解

    node中的Express框架詳解

    這篇文章主要介紹了node中的Express框架,框架是為了規(guī)范開發(fā)流程,降低開發(fā)難度,提高開發(fā)效率而制定的一套共人們使用的功能模塊或者是編程的約定,需要的朋友可以參考下
    2023-04-04
  • 安裝多版本node的完整步驟記錄

    安裝多版本node的完整步驟記錄

    在平時的使用中常會遇到這樣的場景,手上有多個前端項目,每個項目使用的Nodejs的版本都不太一致,下面這篇文章主要給大家介紹了關(guān)于安裝多版本node的完整步驟,需要的朋友可以參考下
    2024-01-01
  • Node.js 深度調(diào)試方法解析

    Node.js 深度調(diào)試方法解析

    這篇文章主要介紹了Node.js 深度調(diào)試方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 詳解從買域名到使用pm2部署node.js項目全過程

    詳解從買域名到使用pm2部署node.js項目全過程

    本篇文章主要介紹了詳解從買域名到使用pm2部署node.js項目全過程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • node.js監(jiān)聽文件變化的實現(xiàn)方法

    node.js監(jiān)聽文件變化的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于node.js監(jiān)聽文件變化的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用node.js具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • node中IO以及定時器優(yōu)先級詳解

    node中IO以及定時器優(yōu)先級詳解

    這篇文章主要給大家介紹了關(guān)于node中IO以及定時器優(yōu)先級的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用node具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05

最新評論

漯河市| 班戈县| 大埔区| 莱西市| 安福县| 娄烦县| 泊头市| 平凉市| 六枝特区| 房山区| 蓬莱市| 泰宁县| 大余县| 泽州县| 海淀区| 图们市| 兴文县| 溧阳市| 建始县| 且末县| 尤溪县| 胶南市| 益阳市| 无为县| 扎兰屯市| 安吉县| 林口县| 西和县| 灵台县| 漯河市| 鹤岗市| 民勤县| 云林县| 杂多县| 伊通| 庄浪县| 利川市| 昆山市| 柯坪县| 丰原市| 永安市|