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/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

发表回复

登录后才能评论