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

Token:解决 Cookie+Session 痛点的新一代「身份凭证」

一、为什么会出现 Token?

1. Cookie + Session 的天生痛点

  1. 服务器压力大Session 存在服务器内存 / Redis,用户越多占用越大。
  2. 分布式集群麻烦必须做 Session 共享(Redis 同步、IP 绑定等)。
  3. 跨域 / 跨端不友好Cookie 受同源策略限制,APP、小程序、第三方跨域场景难用。
  4. 安全风险自动携带 Cookie,易受 CSRF 攻击。

2. Token 要解决的核心问题

  • 服务器无状态:不存用户会话信息
  • 天然支持分布式 / 跨域
  • 更安全、更灵活
  • 适合:Web、APP、小程序、微服务、第三方授权

二、Token 基本概念

1. 什么是 Token

  • Token = 令牌 / 凭证
  • 是服务器生成的一串加密字符串,代表用户身份和权限。
  • 客户端自己保存,每次请求主动带上,服务器验证后即可识别身份。

2. 核心特点

  • 无状态(Stateless)服务器不存任何 Session,信息全部存在 Token 里。
  • 跨端友好不依赖 Cookie,可放在 Header、Param 等任意位置。
  • 自包含Token 里可直接存用户 ID、权限、过期时间等。
  • 可加密签名防止篡改、伪造。

三、Token 完整登录流程(经典)

  1. 用户登录客户端提交:用户名 + 密码
  2. 服务器验证验证通过后,生成 Token(包含用户信息 + 签名)
  3. 返回 Token服务器把 Token 发给客户端
  4. 客户端保存存在:
    • localStorage / sessionStorage
    • Cookie(手动设置,不依赖自动携带)
    • APP 本地存储
  5. 后续请求客户端主动在请求头带上:

    plaintext

    Authorization: Bearer <token>
  6. 服务器验证解析 Token → 验签名 → 查过期 → 拿到用户信息不需要查 Session/Redis(基础 JWT 场景)

四、Token 主流实现:JWT

1. JWT = JSON Web Token

目前最标准、最常用的 Token 格式。

2. JWT 结构(三段式,用.分隔)

plaintext

Header.Payload.Signature
① Header(头)
  • 声明:算法 + 类型
  • 示例:

    json

    { "alg": "HS256", "typ": "JWT" }
② Payload(负载)
  • 存放实际数据(用户信息、过期时间等)
  • 官方标准字段(推荐):
    • iss签发者
    • sub用户 ID
    • exp过期时间
    • iat签发时间
  • 注意:Payload 只是 Base64 编码,不是加密,不要存密码等敏感信息。
③ Signature(签名)
  • 保证 Token不被篡改
  • 公式:

    plaintext

    Signature = HMACSHA256( Base64(Header) + "." + Base64(Payload), 服务器密钥 )
  • 只要密钥不泄露,别人就无法伪造 Token。

五、Token 与 Cookie/Session 核心对比(面试必背)

表格

维度Cookie + SessionToken(JWT)
存储位置Session 存服务器信息存在客户端自身
状态有状态无状态
分布式支持需要共享方案(Redis 等)天然支持
跨域 / 跨端弱,受同源策略限制强,支持 Web/APP/ 小程序 / 微服务
性能服务器查表,量大有压力直接验签,无 IO,性能更好
CSRF 风险高(自动带 Cookie)低(需主动携带,可控制)
安全性依赖 Cookie 配置签名防篡改,可加密
失效控制服务器可直接删 Session无法主动作废,只能等过期(可用黑名单)

六、Token 的优点

  1. 无状态,减轻服务器存储压力
  2. 天然支持水平扩展,适合微服务、集群
  3. 跨域跨端友好,不依赖 Cookie
  4. 防 CSRF(不自动发送,可控制来源)
  5. 可自包含权限,适合第三方授权(OAuth2)

七、Token 的缺点与解决方案

1. 无法主动作废(最大痛点)

  • Token 一旦签发,只能等到期。
  • 解决方案:
    • Redis 黑名单:作废的 Token 存入 Redis,请求时先校验
    • 短有效期 + 刷新 Token(Refresh Token)

2. 长度比 SessionId 大

  • 每次请求携带数据稍多,可忽略。

3. Payload 可被解码

  • 不要存密码、手机号明文等敏感信息。

八、Token 携带方式(实战)

  1. 推荐:请求头 Authorization

    plaintext

    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
  2. 放在 URL 参数(不推荐)
  3. 放在 POST 参数
  4. 放在自定义 Header(如token: xxx

九、双 Token 方案(企业级常用)

为了解决安全体验平衡:

  • Access Token
    • 有效期短(5~30 分钟)
    • 用于正常接口请求
  • Refresh Token
    • 有效期长(几天~几周)
    • 仅用于刷新 Access Token
    • 泄露风险相对可控

流程:

  1. 登录 → 返回 AT + RT
  2. AT 过期 → 用 RT 换新 AT
  3. RT 过期 → 重新登录

十、安全最佳实践

  1. 必须用 HTTPS防止 Token 被抓包窃取。
  2. 签名密钥严格保密密钥泄露 = 所有人可伪造 Token。
  3. 设置合理过期时间避免长期有效。
  4. 敏感信息不放入 Payload只放用户 ID、角色,不放密码。
  5. 开启 Redis 黑名单支持强制下线、改密后作废旧 Token。
  6. 避免存在 localStorage 被 XSS 窃取可存在HttpOnly Cookie里(仍用 JWT 逻辑,只是借用存储)。

十一、高频面试题极简答案

  1. Token 解决了 Session 什么问题?无状态、天然分布式、跨端友好、降低服务器压力、防 CSRF。

  2. JWT 由哪三部分组成?Header、Payload、Signature。

  3. JWT 能存密码吗?不能,Payload 只是 Base64 编码,可解码。

  4. Token 怎么防止篡改?通过签名(Signature),服务端验签即可判断是否被修改。

  5. Token 如何实现主动退出?使用 Redis 黑名单,将 Token 加入黑名单即作废。

  6. Token 比 Session 更安全吗?在防 CSRF、防劫持可控性上更安全;但 XSS 风险需要自己防护。


十二、全文总结

  • Cookie+Session:有状态、服务器存储、集群麻烦、适合传统 Web。
  • Token(JWT):无状态、自包含、天然分布式、跨端神器。
  • 核心思想:把 “身份凭证” 交给客户端自己保管,服务器只负责验签不负责存储。
  • 现代架构:前后端分离、APP、小程序、微服务 →首选 Token
http://www.jsqmd.com/news/530353/

相关文章:

  • 优质wordpress主题网站推荐
  • TLV320音频编解码器WAV播放库设计与嵌入式实现
  • 3-24午夜盘思
  • 掌握Jasmine跨平台漫画浏览器的用户认证系统:从零到专业的三步进阶
  • mvn install:install-file
  • 如何用Brython构建跨平台响应式Web应用:面向移动端开发的完整指南
  • dds
  • OpCore Simplify革新:从配置困境到5分钟部署的突破指南
  • 3个核心优势:asmr-downloader如何解决ASMR资源管理难题
  • 终极代码质量指南:js-yaml 从代码规范到自动化测试的完整流程
  • 无锡半导体行业展会推荐,高规格产业展会一览与参展价值分析 - 品牌2026
  • 终极Bounce.js实战指南:5个顶级网站如何用CSS3动画提升用户体验
  • Bounce.js 插件开发终极指南:3步打造自定义CSS3动画扩展
  • 3步颠覆ComfyUI插件管理:让AI绘画效率提升10倍的开源工具
  • 当敏捷开发遇上硬件制造:复盘波音737MAX项目管理的‘死亡档期’与教训
  • MGSwipeTableCell代码重构终极指南:如何优化现有滑动代码结构
  • 智能税务系统:PDF-Parser-1.0处理增值税发票
  • RimSort:《边缘世界》模组高效管理工具全攻略
  • 鸽姆智库(GG3M)天使轮融资BP:全球首个C2文明元决策操作系统,千倍回报锚定星际永续
  • 终极kill-doc文档下载工具:高效自动化下载30+平台文档的完整指南
  • 【Dify技术应用】-父子分段模式实战:提升长文档检索质量的关键策略
  • 怎样高效提取MSI文件:lessmsi免费开源工具完整指南
  • 智能辅助重塑游戏体验:BetterGI自动化工具全方位解析
  • Romi32U4 Arduino库深度解析:ATmega32U4机器人控制核心指南
  • NCM格式解锁指南:5步掌握NCMconverter的音乐自由之道
  • React NodeGUI终极指南:7个自定义组件与原生API集成技巧
  • 终极指南:如何确保CanCan授权逻辑正确性与权限测试覆盖完整方案
  • 网盘直链解析工具:突破下载限制的技术方案
  • 哪款Agent产品能最好地结合大模型能力进行人机协作?深度拆解AI Agent落地的三大技术范式
  • 直接上干货,咱聊聊西门子1200PLC自由口通讯那点事儿。这个经典样例程序我实测过,用串口助手收发数据稳得一批,最适合刚入手的兄弟当模板用