当前位置: 首页 > news >正文

Token和JWT的关系详细讲解

Token 和 JSON Web Token (JWT) 是两个相关但概念上不同的术语,它们在现代 Web 应用程序的身份验证和授权中扮演着重要角色。下面将详细介绍两者之间的关系以及 JWT 的具体工作原理。

1. Token 概述

Token 是一种广义的概念,指的是任何可以证明用户身份或权限的令牌。它可以是任何形式的数据结构,只要能够被服务器识别并验证即可。常见的 Token 类型包括:

  • Session Tokens:通常存储在服务器端会话中,客户端每次请求时携带一个 Session ID。
  • OAuth Tokens:用于第三方登录和 API 访问控制。
  • JSON Web Tokens (JWT):一种自包含的、基于标准的 Token 格式,广泛应用于无状态认证机制。

2. JWT 详解

2.1 定义

JSON Web Token (JWT) 是一种开放标准 (RFC 7519),定义了一种紧凑且自包含的方式用于在网络应用环境间安全地传输信息。这些信息经过数字签名(使用 HMAC 算法或 RSA 公私钥对)以确保其完整性和不可篡改性。

2.2 结构

JWT 由三部分组成,每一部分之间用点号(.)分隔:

  • Header:头部包含了令牌的类型(通常是 JWT)和所使用的签名算法(如 HMAC SHA256 或 RSA)。例如:

    {"alg": "HS256","typ": "JWT"
    }
  • Payload(也称为 Claims):载荷部分包含了声明,即要传达的信息。声明分为三种类型:

    • Registered claims:预定义的标准字段,如 iss (issuer), exp (expiration time), sub (subject) 等。
    • Public claims:可以自定义的公开字段,但为了避免冲突应先注册到 IANA 或采用 URL 命名空间。
    • Private claims:应用程序内部使用的私有字段。

    示例 Payload:

    {"sub": "1234567890","name": "John Doe","admin": true,"iat": 1516239022
    }
  • Signature:签名是用来验证消息是否来自可信任的一方,并保证数据没有被篡改。它通过对 Header 和 Payload 进行 Base64Url 编码后,再与密钥一起通过指定的算法计算得出。例如:

    HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),your-256-bit-secret
    )

最终生成的 JWT 可能看起来像这样:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
2.3 工作流程
  1. 登录:当用户成功登录后,服务器会创建一个 JWT 并将其返回给客户端。
  2. 存储:客户端收到 JWT 后,通常会保存在本地存储、cookie 或内存中。
  3. 发送请求:每当客户端向受保护的资源发起请求时,都会在 HTTP 请求头中的 Authorization 字段附加 Bearer Token 形式的 JWT。
  4. 验证:服务器接收到带有 JWT 的请求后,解析并验证该 Token。如果有效,则处理请求;否则拒绝访问。
2.4 优点
  • 无状态:因为所有必要的信息都包含在 JWT 内部,所以服务器不需要存储会话信息,这使得 JWT 非常适合分布式系统。
  • 跨域支持:由于 JWT 是字符串形式,因此很容易跨越不同域名进行传递。
  • 安全性:通过加密签名,确保了 JWT 的完整性和真实性。
2.5 缺点
  • 大小问题:相比于 session id,JWT 本身较大,尤其是在包含大量 claim 的时候,可能会增加网络流量。
  • 过期管理:一旦签发,除非设置过期时间 (exp),否则无法主动使 JWT 失效。对于某些场景可能需要额外的逻辑来处理 token 的刷新或撤销。
  • 隐私风险:虽然 JWT 内容是经过编码而非加密,但如果不小心泄露,任何人都可以读取其中的信息。因此敏感数据不应放在 payload 中。

3. Token 与 JWT 的关系

  • JWT 是一种特定类型的 Token:JWT 符合 Token 的定义,但它遵循 RFC 7519 规范,具有标准化的格式和特性。
  • 用途重叠:JWT 和其他类型的 Token 都可以用来实现身份验证和授权,但在无状态架构和服务端无须维护会话状态的情况下,JWT 更加适用。
  • 互操作性强:由于其标准化格式,JWT 在不同平台和技术栈之间更容易共享和解析。

总结

Token 和 JWT 是紧密相连却又各自独立的概念。理解这两者之间的区别有助于选择最适合项目需求的身份验证方案。JWT 作为一种轻量级、安全且易于使用的 Token 实现方式,在当今的 Web 开发中得到了广泛应用。

http://www.lryc.cn/news/520154.html

相关文章:

  • 【Linux系列】Curl 参数详解与实践应用
  • 解决 Git SSL 连接错误:OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno
  • 《Vue3 八》<script setup> 语法
  • 51单片机和STM32集成蓝牙模块实用指南
  • Transformer:深度学习的变革力量
  • sql 函数
  • C# OpenCV机器视觉:OCR产品序列号识别
  • 2012wtl,学习活扩
  • 使用Deepseek搭建类Cursor编辑器
  • mysql,PostgreSQL,Oracle数据库sql的细微差异(2) [whith as; group by; 日期引用]
  • 基于改进粒子群优化的无人机最优能耗路径规划
  • C#中通道(Channels)的应用之(生产者-消费者模式)
  • git: hint:use --reapply-cherry-picks to include skipped commits
  • AI:对比ChatGPT这类聊天机器人,人形机器人对人类有哪些不一样的影响?
  • vue3 +ts 学习记录
  • 微服务的配置共享
  • Scala分布式语言二(基础功能搭建、面向对象基础、面向对象高级、异常、集合)
  • Chromium 132 编译指南 Windows 篇 - 配置核心环境变量 (三)
  • 开源文件存储分享平台Seafile部署与应用
  • MYSQL-创建数据库 CREATE DATABASE (十一)
  • Java高频面试之SE-11
  • C#结构体,枚举,泛型,事件,委托--10
  • MapReduce完整工作流程
  • 网络编程(1)
  • mysql中创建计算字段
  • 【算法】判断一个链表是否为回文结构
  • 计算机网络之---ICMP协议与Ping命令
  • 【硬件介绍】Type-C接口详解
  • 【Pandas】pandas Series rtruediv
  • 项目开发版本控制Git流程规范