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

jwt在node中的應(yīng)用實(shí)踐(安裝配置封裝)

 更新時(shí)間:2023年09月06日 09:42:35   作者:MarkGuan  
這篇文章主要為大家介紹了jwt在node中的應(yīng)用實(shí)踐包括安裝配置封裝,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

導(dǎo)語

由于http是無狀態(tài)的,請求響應(yīng)過程中不存儲(chǔ)記錄用戶身份信息,所以就出現(xiàn)了很多用戶識(shí)別存儲(chǔ)用戶身份的方法,比如cookie,session,jwt。我最近做的一個(gè)接口服務(wù)使用了jwt來存儲(chǔ)管理用戶信息,相較于本地cookie存儲(chǔ),服務(wù)器端session存儲(chǔ),jwt就變得比較安全和節(jié)省方便,本文就jwt在node服務(wù)中的使用方法做一個(gè)簡單的總結(jié)。

jwt簡介

概念

JWT全稱JSON Web Token,它是一種開放標(biāo)準(zhǔn)RFC 7519,定義了一種緊湊且自包含的方式,用于在各方之間作為JSON對象安全地傳輸信息。JWT可以使用密鑰或使用RSA或ECDSA的公鑰/私鑰對進(jìn)行簽名,可以對簽名進(jìn)行驗(yàn)證。

組成部分

jwt簽名令牌一般由三部分組成,分別是Header(頭部信息),Payload(載荷),Signature(簽名),例如xxxxx.yyyyy.zzzzz。

  • header

一般是存儲(chǔ)令牌的類型和簽名算法,比如:

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

一般是存儲(chǔ)聲明,也就是用戶信息和附件數(shù)據(jù),分為注冊聲明、公共聲明和私人聲明。

比如:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}
  • 簽名

利用簽名算法對Header和Payload進(jìn)行簽名

比如:

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

那么一個(gè)標(biāo)準(zhǔn)的jwt簽名令牌會(huì)是這樣的

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c。

應(yīng)用場景

  • 用戶授權(quán)訪問

比如用戶登錄后,服務(wù)端下發(fā)一個(gè)jwt令牌給客戶端,每次用戶請求數(shù)據(jù)都在請求頭里面攜帶此令牌,服務(wù)端驗(yàn)證通過后可以獲取到數(shù)據(jù),這種方式開銷很小,并不需要服務(wù)端進(jìn)行存儲(chǔ),而且還可以跨域使用。

  • 信息交換

在各方之間存儲(chǔ)加密信息,驗(yàn)證簽名內(nèi)容是否篡改。

安全性

由于令牌可以被拆解,里面的header和Payload可以被解析看到,所以盡量不要在Payload里面存儲(chǔ)一些私密的信息。

安裝配置

下面就在node中使用jwt做一下操作。

在npm網(wǎng)站,有很多的jwt包,你可以選擇你認(rèn)為合適的。

搜索jwt

NAME                      | DESCRIPTION          | AUTHOR          | DATE       | VERSION  | KEYWORDS
jwt                       | JSON Web Token for…  | =mattrobenolt   | 2012-05-05 | 0.2.0    |
express-jwt               | JWT authentication…  | =woloski…       | 2021-08-11 | 6.1.0    | auth authn authentication authz authorization http jwt token oauth express
jsonwebtoken              | JSON Web Token…      | =dschenkelman…  | 2019-03-18 | 8.5.1    | jwt
jwt-decode                | Decode JWT tokens,…  | =jeff.shuman…   | 2020-11-16 | 3.1.2    | jwt browser
passport-jwt              | Passport…            | =themikenichol… | 2018-03-13 | 4.0.0    | Passport Strategy JSON Web Token JWT
koa-jwt                   | Koa middleware for…  | =stiang…        | 2021-09-24 | 4.0.3    | auth authn authentication authz authorization http jwt json middleware token oauth permissions koa
jsrsasign                 | opensource free…     | =kjur           | 2021-12-01 | 10.5.1   | crypto cryptography Cipher RSA ECDSA DSA RSAPSS PKCS#1 PKCS#5 PKCS#8 private key public key CSR PKCS#10 hash function HMac ASN.1 certexpress-jwt-permissions   | Express middleware…  | =angryunicorn…  | 2021-08-18 | 1.3.6    | express middleware JWT permissions authorization token security
njwt                      | JWT Library for…     | =robertjd       | 2021-12-03 | 1.2.0    | jwt
fastify-jwt               | JWT utils for…       | =starptech…     | 2021-12-03 | 4.1.0    | jwt json token jsonwebtoken fastify
did-jwt                   | Library for Signing… | =simonas-notcat… | 2021-12-03 | 5.12.1   | 
hapi-auth-jwt2            | Hapi.js…             | =nelsonic       | 2020-09-08 | 10.2.0   | Hapi.js Authentication Auth JSON Web Tokens JWT
auth0-lock                | Auth0 Lock           | =jeff.shuman…   | 2021-11-02 | 11.31.1  | auth0 auth openid authentication passwordless browser jwt
jwks-rsa                  | Library to retrieve… | =jeff.shuman…   | 2021-10-15 | 2.0.5    | jwks rsa jwt
restify-jwt-community     | JWT authentication…  | =frbuceta       | 2021-12-05 | 1.1.21   | auth authentication authorization http jwt token oauth restify
did-jwt-vc                | Create and verify…   | =simonas-notcat… | 2021-11-23 | 2.1.8    | 
jwt-service               | A simple wrapper…    | =nfroidure      | 2021-11-01 | 8.0.0    | jwt knifecycle
angular-jwt               | Library to help you… | =jeff.shuman…   | 2019-03-20 | 0.1.11   |
@thream/socketio-jwt      | Authenticate…        | =divlo          | 2021-07-23 | 2.1.1    | socket socket.io jwt
appstore-connect-jwt-gene | [![NPM](https://nod… | =poad           | 2021-10-15 | 1.0.1    | jwt appstore
rator-core                |

安裝jwt

我個(gè)人覺得這個(gè)jsonwebtoken很不錯(cuò),本文就使用這個(gè)包。

npm i jsonwebtoken

常見用法

  • 簽名

簽名語法

jwt.sign(payload, secretOrPrivateKey, [options, callback])。

例如:

// 一般簽名
var jwt = require('jsonwebtoken');
var token = jwt.sign({ foo: 'bar' }, 'secret');
//  加私鑰簽名
var privateKey = fs.readFileSync('private.key');
var token = jwt.sign({ foo: 'bar' }, privateKey, { algorithm: 'RS256'});
// 設(shè)置過期時(shí)間
jwt.sign({
  data: 'bar'
}, 'secret', { expiresIn: 60 * 60 }); // 1h
  • 驗(yàn)證

驗(yàn)證語法

jwt.verify(token, secretOrPublicKey, [options, callback])

例如:

// 一般驗(yàn)證
var decoded = jwt.verify(token, 'secret');
console.log(decoded.foo) // bar
// 公鑰驗(yàn)證
var cert = fs.readFileSync('public.pem');
jwt.verify(token, cert, function(err, decoded) {
  console.log(decoded.foo) // bar
});
  • 解碼

解碼語法

jwt.decode(token [, options])

例如:

var decoded = jwt.decode(token, {complete: true});
console.log(decoded.header);
console.log(decoded.payload);

封裝方法

根據(jù)安裝配置里面的方法,可以根據(jù)自己的需要進(jìn)行二次封裝,更加適合自己的方法。

  • 引入依賴包和配置
const jwt = require("jsonwebtoken");
const config = {
    secret: '2021123456**',
    time: 60 * 60,
}
  • 簽名
function create (data, time) {
  let token = jwt.sign(data, config.secret, {
    algorithm: "HS256",
    expiresIn: time || config.time,
  })
  return token;
}
  • 驗(yàn)證
function verify (token) {
  return jwt.verify(token, config.secret, function (err, decoded) {
    if (err) {
      return {
        code: 1,
        msg: 'invalid',
        data: null,
      }
    } else {
      return {
        code: 2,
        msg: 'valid',
        data: decoded,
      }
    }
  })
}
  • 解碼
function decoded (token, complete = true) {
  return jwt.decode(token, {
    complete,
  });
}

上面是比較簡單的方法,如果你還想使用公鑰私鑰,可以用上面安裝配置里面介紹的那樣。

實(shí)戰(zhàn)練習(xí)

經(jīng)過上面的封裝方法,可以來實(shí)戰(zhàn)演練一下,是否有效。

  • 新建一個(gè)文件夾test,新建一個(gè)文件index.js用于存放測試案例,jwt.js用于存儲(chǔ)調(diào)用方法。
mkdir test
cd test
npm init -y
npm i jsonwebtoken
  • jwt方法
// jwt.js
const jwt = require('jsonwebtoken');
const config = {
    secret: '2021123456', // 密鑰
    time: 60*60, // 過期時(shí)間
}
// 創(chuàng)建簽名令牌
function create (data, time) {
    let token = jwt.sign(data, config.secret, {
        algorithm: 'HS256',
        expiresIn: time || config.time,
    });
    return token;
}
// 驗(yàn)證令牌
function verify (token) {
    return jwt.verify(token, config.secret, function (err, decoded) {
      if (err) {
        return {
          code: 1,
          msg: 'invalid',
          data: null,
        }
      } else {
        return {
          code: 2,
          msg: 'valid',
          data: decoded,
        }
      }
    })
}
// 解碼令牌
function decoded (token, complete = true) {
    return jwt.decode(token, {
      complete,
    });
}
const token = {
    create,
    verify,
    decoded,
}
module.exports = token;
  • 創(chuàng)建token,驗(yàn)證token,解碼token
// index.js
const jwt = require('./jwt');
// 生成令牌
let token = jwt.create({'id': 1, 'name': 'mark'}, 60*60*2);
console.log(token); 
/*
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJpZCI6MSwibmFtZSI6Im1hcmsiLCJpYXQiOjE2MzkxMDYyNzMsImV4cCI6MTYzOTExMzQ3M30.
20O1r0NVMf-j-9RwNcgls9ja0n1rGqSKN51_cRcvpE8
*/
// 驗(yàn)證令牌
let verifyRes = jwt.verify(token);
console.log(verifyRes); 
/* 
{
    code: 2,
    msg: 'valid',
    data: { id: 1, name: 'mark', iat: 1639106273, exp: 1639113473 }
}
*/
// 解碼令牌
let deRes = jwt.decoded(token, true);
console.log(deRes);
/*
{
  header: { alg: 'HS256', typ: 'JWT' },
  payload: { id: 1, name: 'mark', iat: 1639106273, exp: 1639113473 },
  signature: '20O1r0NVMf-j-9RwNcgls9ja0n1rGqSKN51_cRcvpE8'
}
*/

運(yùn)行一下命令node index.js測試是否正確。

好了,以上就是jwt在node中的一些應(yīng)用和實(shí)踐方法!

更多關(guān)于jwt在node中的應(yīng)用與實(shí)踐的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入理解Node.js回調(diào)函數(shù)

    深入理解Node.js回調(diào)函數(shù)

    這篇文章主要介紹了Node.js回調(diào)函數(shù),為了解決回調(diào)函數(shù)的缺點(diǎn),出現(xiàn)了一些替代方案,如Promise、async/await等,這些方案提供了更簡潔、可讀性更高的代碼結(jié)構(gòu),使異步編程更加容易和可維護(hù),需要的朋友可以參考下
    2023-11-11
  • node.js中 mysql 增刪改查操作及async,await處理實(shí)例分析

    node.js中 mysql 增刪改查操作及async,await處理實(shí)例分析

    這篇文章主要介紹了node.js中 mysql 增刪改查操作及async,await處理,結(jié)合實(shí)例形式分析了node.js中 mysql庫安裝、增刪改查操作及async,await處理相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2020-02-02
  • Google官方支持的NodeJS訪問API,提供后臺(tái)登錄授權(quán)

    Google官方支持的NodeJS訪問API,提供后臺(tái)登錄授權(quán)

    Google官方支持的NodeJS集成客戶端,用以訪問Google APIs, 支持OAuth 2.0授信及登錄認(rèn)證。登錄以后即可在后臺(tái)訪問例如 Google Drive(云存儲(chǔ)), Google Analytics, Gmail等服務(wù)。
    2014-07-07
  • 基于html5和nodejs相結(jié)合實(shí)現(xiàn)websocket即使通訊

    基于html5和nodejs相結(jié)合實(shí)現(xiàn)websocket即使通訊

    HTML5 擁有許多引人注目的新特性,如 Canvas、本地存儲(chǔ)、多媒體編程接口、WebSocket 等等。雖然現(xiàn)在大家把它捧的很火的樣子,但是個(gè)人認(rèn)為它還需要其他平臺(tái)的支持才能真正的"火起來"
    2015-11-11
  • Nodejs搭建wss服務(wù)器教程

    Nodejs搭建wss服務(wù)器教程

    這篇文章主要為大家詳細(xì)介紹了Nodejs搭建wss服務(wù)器的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Node.js使用Express框架遇到中文亂碼問題的解決方案

    Node.js使用Express框架遇到中文亂碼問題的解決方案

    在Node.js中使用Express框架時(shí),處理中文亂碼問題通常涉及到設(shè)置正確的字符編碼和中間件,以下是一些常見的解決方案,需要的朋友可以參考下
    2025-11-11
  • 詳解Nodejs的timers模塊

    詳解Nodejs的timers模塊

    本篇文章主要介紹了Nodejs的timers模塊,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • 詳解一些適用于Node.js的命名約定

    詳解一些適用于Node.js的命名約定

    這篇文章主要介紹了詳解一些適用于Node.js的命名約定,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Nodejs關(guān)于gzip/deflate壓縮詳解

    Nodejs關(guān)于gzip/deflate壓縮詳解

    本文主要向大家介紹了nodejs中關(guān)于gzip/deflate壓縮的2種方法,分別是管道壓縮和非管道壓縮,十分詳細(xì),并附帶示例,這里推薦給大家參考下。
    2015-03-03
  • nodejs+express最簡易的連接數(shù)據(jù)庫的方法

    nodejs+express最簡易的連接數(shù)據(jù)庫的方法

    這篇文章主要介紹了nodejs+express 最簡易的連接數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評論

宜阳县| 揭西县| 临海市| 太和县| 呈贡县| 淮北市| 延长县| 行唐县| 东海县| 宜良县| 桐庐县| 诏安县| 阳山县| 鲁山县| 威海市| 防城港市| 紫阳县| 石嘴山市| 柳州市| 桐梓县| 满洲里市| 武陟县| 萨迦县| 苍溪县| 呼伦贝尔市| 乐安县| 内江市| 胶南市| 常州市| 余干县| 汉沽区| 治多县| 徐汇区| 荥经县| 东兰县| 浦城县| 屏边| 高要市| 阳高县| 富锦市| 瑞金市|