欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

JWT

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

生成驗(yàn)證流程

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

header(標(biāo)頭)

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

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

payload(有效負(fù)載)

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

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

signature(簽名)

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

生成signature:

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

訪問(wèn)令牌(token)

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

舉例:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1NWM3OGNjZDkxMDc2NjFlNDFhYmQ5ZiIsImlhdCI6MTcwMjI2MDEwNiwiZXhwIjoxNzEwMDM2MTA2fQ.ca-J91WaThntP3IhMBQNps9MVqts8oi_f62KcV2r4D8

express jwt生成、驗(yàn)證

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

2、在代碼controller層引入依賴,在登錄、注冊(cè)的時(shí)候生成token

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


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

生成jwt

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

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

驗(yàn)證jwt

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

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

// protect中間件, 用于驗(yàn)證用戶
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('您還還沒(méi)有登錄或注冊(cè)', 401)
    );
  }

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

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

相關(guān)文章

  • node中使用log4js4.x版本記錄日志的方法

    node中使用log4js4.x版本記錄日志的方法

    這篇文章主要介紹了node中使用log4js4.x版本記錄日志的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Node.js和Express中設(shè)置TypeScript的實(shí)現(xiàn)步驟

    Node.js和Express中設(shè)置TypeScript的實(shí)現(xiàn)步驟

    本文主要介紹了Node.js和Express中設(shè)置TypeScript的實(shí)現(xiàn)步驟文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • gulp解決跨域的配置文件問(wèn)題

    gulp解決跨域的配置文件問(wèn)題

    下面小編就為大家?guī)?lái)一篇gulp解決跨域的配置文件問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 我的Node.js學(xué)習(xí)之路(四)--單元測(cè)試

    我的Node.js學(xué)習(xí)之路(四)--單元測(cè)試

    在專業(yè)化的軟件開發(fā)過(guò)程中,無(wú)論什么平臺(tái)語(yǔ)言,現(xiàn)在都需要UnitTest單元測(cè)試. Node.js有built-in的Assert。 今天讓我們來(lái)看一下Node.js的單元測(cè)試。在這兒我們使用nodeunit
    2014-07-07
  • 利用node.js開發(fā)cli的完整步驟

    利用node.js開發(fā)cli的完整步驟

    這篇文章主要給大家介紹了關(guān)于如何利用node.js開發(fā)cli的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • nodejs服務(wù)搭建教程 nodejs訪問(wèn)本地站點(diǎn)文件

    nodejs服務(wù)搭建教程 nodejs訪問(wèn)本地站點(diǎn)文件

    這篇文章主要為大家詳細(xì)介紹了nodejs服務(wù)搭建教程,訪問(wèn)本地站點(diǎn)文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Node.js Buffer模塊功能及常用方法實(shí)例分析

    Node.js Buffer模塊功能及常用方法實(shí)例分析

    這篇文章主要介紹了Node.js Buffer模塊功能及常用方法,結(jié)合實(shí)例形式分析了Buffer模塊的各種常用函數(shù)及相關(guān)使用技巧,需要的朋友可以參考下
    2019-01-01
  • Nodejs處理Json文件并將處理后的數(shù)據(jù)寫入新文件中

    Nodejs處理Json文件并將處理后的數(shù)據(jù)寫入新文件中

    這篇文章主要介紹了Nodejs處理Json文件并將處理后的數(shù)據(jù)寫入新文件中,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • node.js學(xué)習(xí)總結(jié)之調(diào)式代碼的方法

    node.js學(xué)習(xí)總結(jié)之調(diào)式代碼的方法

    調(diào)式代碼很多時(shí)候類似于查案一樣,只是結(jié)果的重要程度不同,警察查案為的是人民安穩(wěn),而我們調(diào)式則是為了系統(tǒng)的安穩(wěn)。既然這樣我們就不要冤枉任何一段代碼和程序,以免他們受到不合理的懲罰。
    2014-06-06
  • 用Node提供靜態(tài)文件服務(wù)的方法

    用Node提供靜態(tài)文件服務(wù)的方法

    這篇文章主要介紹了用Node提供靜態(tài)文件服務(wù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07

最新評(píng)論