JWT是什麼?

JWT是指JSON Web Token,是一種基於JSON格式的用於進行身份認證的令牌。它可以將用戶身份信息以JSON格式進行編碼,並採用數字簽名的方式保證其不被篡改。JWT可以通過在HTTP請求頭中傳遞它來實現跨域身份認證,從而實現無狀態分散式認證。

一、JWT的組成部分

JWT由三部分組成:Header、Payload和Signature。

1、Header

Header是一個JSON對象,包含兩個欄位,分別是

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

其中typ表示token的類型,固定為JWT;alg表示token簽名的演算法。HS256表示HMAC-SHA256。

2、Payload

Payload是真正的用戶信息,在編碼時需要遵循一定規範,一般包含以下欄位:

{
  "sub": "123",         // 主題,一般指用戶ID
  "name": "user",       // 用戶名
  "iat": 1626938727,    // token簽發時間
  "exp": 1627101527,    // token過期時間
  "iss": "www.example.com", // token簽發者
  "aud": "www.example.com"  // token接收者
}

3、Signature

Signature用於保證token不被篡改。它由Header和Payload以及秘鑰進行數字簽名生成。生成方法如下:

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

其中,HMACSHA256表示採用HMAC-SHA256演算法進行簽名;secret為秘鑰。

二、使用JWT進行身份認證

使用JWT進行身份認證有以下幾個步驟:

1、用戶登錄

用戶使用用戶名和密碼登錄系統,伺服器檢查用戶信息是否正確,正確則生成一個JWT並返回給用戶。

2、在請求頭中攜帶JWT

用戶在後續的HTTP請求中,需要在請求頭中攜帶該JWT,格式如下:

Authorization: Bearer <JWT>

其中Authorization為請求頭名稱,Bearer是類型,<JWT>為實際JWT。

3、伺服器驗證JWT並解碼

伺服器需要從請求頭中獲取JWT並進行驗證,驗證需要使用到JWT的簽名演算法和秘鑰,驗證通過之後可以對JWT進行解碼獲取用戶身份信息。

三、使用jsonwebtoken庫進行JWT的生成和解碼

jsonwebtoken庫是使用Node.js進行JWT生成和解碼的常用庫之一。使用jsonwebtoken庫可以快速、簡便地實現JWT的生成和解碼。

1、生成JWT

使用jsonwebtoken庫生成JWT的示例代碼如下:

const jwt = require('jsonwebtoken');

const token = jwt.sign({
  sub: '123',
  name: 'user',
  iat: Math.floor(Date.now() / 1000),
  exp: Math.floor(Date.now() / 1000) + (60 * 60),
  iss: 'www.example.com',
  aud: 'www.example.com'
}, 'secret');  // secret為秘鑰

console.log(token);

2、解碼JWT

使用jsonwebtoken庫解碼JWT的示例代碼如下:

const jwt = require('jsonwebtoken');

const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMiLCJuYW1lIjoidXNlciIsImlhdCI6MTYyNjkzODcyNywiZXhwIjoxNjI3MDExNTI3LCJpc3MiOiJ3d3cuZXhhbXBsZS5jb20iLCJhdWQiOiJ3d3cuZXhhbXBsZS5jb20ifQ.mnM_7X9bouqYuoWZ5d2UcVen3iHjf2k6-5N2KZtERvs';

const decoded = jwt.verify(token, 'secret');  // secret為秘鑰

console.log(decoded);

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/156642.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-18 01:57
下一篇 2024-11-18 01:57

相關推薦

  • JWT驗證Token的實現

    本文將從以下幾個方面對JWT驗證Token進行詳細的闡述,包括:JWT概述、JWT驗證Token的意義、JWT驗證Token的過程、JWT驗證Token的代碼實現、JWT驗證Tok…

    編程 2025-04-29
  • JWT String Argument Cannot Be Null or Empty

    JWT(JSON Web Token)是一種用於進行身份驗證的標準。在使用JWT時,經常會遇到「JWT String Argument Cannot Be Null or Empt…

    編程 2025-04-27
  • 從多方面詳解JWT解密

    一、JWT解密工具 在進行JWT解密之前,我們需要先了解一些JWT解密工具。目前市面上有很多免費的在線JWT解密工具,比如https://jwt.io/、https://www.j…

    編程 2025-04-22
  • 從多個方面詳細闡述JWT退出登錄

    一、JWT退出登錄概述 JWT(JSON Web Token)是一種輕量級的認證和授權機制,常用於RESTful API服務中。用戶在登錄成功後,伺服器會對用戶進行認證並生成一個J…

    編程 2025-04-12
  • 使用JWT:一個全面的指南

    一、什麼是JWT? JSON Web Token(JWT)是一個輕量級的身份驗證和授權的工具,它在應用程序間傳輸信息。它以JSON格式表示,包含了必要的簽名和安全驗證信息。JWT由…

    編程 2025-04-12
  • Laravel JWT:基於JWT的Laravel身份驗證和授權

    Laravel JWT是一個基於JWT(JSON Web Token)的Laravel身份驗證和授權包。JWT作為一種輕量級的身份驗證和授權解決方案,在Web應用程序中越來越受歡迎…

    編程 2025-04-12
  • Java JWT認證詳解

    1. JWT簡介 JSON Web Token(JWT),是一種開放的標準(RFC 7519)。 JWT可以在通信雙方之間安全地傳遞用戶身份信息,同時因為它是開放的標準,所以可以被…

    編程 2025-04-02
  • Spring Boot Json Web Token (JWT)

    在現代的Web應用程序中,一種安全的身份驗證機制是必不可少的。其中最流行的是使用Token的身份驗證機制,而Json Web Token (JWT)則是其中最常用的一種標準。在Sp…

    編程 2025-02-25
  • 使用JWT獲取用戶信息

    一、從JS獲取用戶信息 在使用JWT獲取用戶信息之前,先了解從前端代碼中獲取用戶信息的方法: const user = JSON.parse(localStorage.getIte…

    編程 2025-02-05
  • 從多個方面詳解JWT解碼

    一、什麼是JWT JWT(JSON Web Token)是一種用於在網路應用環境間安全地傳輸信息的開放標準(RFC 7519)。JWT由三部分組成:首部,載荷和簽名。首部通常指定了…

    編程 2025-02-05

發表回復

登錄後才能評論