news 2026/6/13 19:43:28

双Token认证+Cookie方案详细流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
双Token认证+Cookie方案详细流程

概述

本文档详细分析了基于Spring Boot的双Token认证(Access Token + Refresh Token)结合Cookie的完整认证方案。该方案通过Access Token进行短期访问控制,通过Refresh Token进行长期会话维持,同时利用Cookie机制实现安全的令牌传递。

核心组件

1. Token类型说明

  • Access Token (访问令牌):短期有效(默认30分钟),用于API访问认证
  • Refresh Token (刷新令牌):长期有效(默认24小时),用于获取新的Access Token
  • Session ID (会话ID):唯一会话标识,与Refresh Token绑定,且在Access Token的JWT中绑定sessionId用于校验。sessionId不仅配合RefreshToken组合使用,也会在每次请求对AccessToken校验时进行绑定校验,确保令牌与会话的一致性。

2. 存入Cookie中的内容说明

  • Access Token Cookie (AT)

    • Name:AT
    • Path:设置为白名单路径(如/file/downFile,/file/downFiles等)
    • 用途:仅在这些特定路径下浏览器才会自动携带Cookie
    • 场景:主要用于文件下载接口,解决img标签等无法自定义Header的问题
  • Refresh Token Cookie (RT)

    • Name:RT
    • Path:设置为/auth/refreshToken
    • 用途:仅在刷新Token接口时浏览器自动携带
    • 安全:限制了Cookie的发送范围,避免在其他接口暴露
  • Session ID Cookie (SID)

    • Name:SID
    • Path:设置为/
    • 用途:所有接口都会自动携带,用于标识会话
    • 安全:配合RefreshToken一起使用,增强安全性

注意:Cookie的Path设置应基于浏览器请求的URI路径,而非Spring Boot Controller的映射路径。在通过Nginx等反向代理暴露的系统内部接口时,最终浏览器请求的path可能与Controller path不同。

3. 数据存储

  • sys_auth_refresh_token 表:存储Refresh Token的哈希值和会话信息,这里仅存储hash值可以避免RT数据泄漏带来风险。
CREATETABLE`sys_auth_refresh_token`(`id`bigintNOTNULLCOMMENT'主键',`session_id`varchar(128)NOTNULLCOMMENT'会话唯一标识',`user_id`varchar(64)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciNOTNULLCOMMENT'token所属用户Id',`token_hash`varchar(255)NOTNULLCOMMENT'Refresh Token 的 BCrypt 哈希值',`login_user_agent`varchar(500)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULLCOMMENT'登录的UserAgent信息',`login_channel`varchar(50)DEFAULTNULLCOMMENT'登录渠道:web/app/wechat等',`ip_address`varchar(45)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULLCOMMENT'登录时的客户端IP',`created_at`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'创建时间',`expires_at`datetimeNOTNULLCOMMENT'过期时间,每次刷新Token时重置过期时间',`revoked`tinyint(1)DEFAULT'0'COMMENT'是否已被撤销',`last_used_at`datetimeDEFAULTNULLCOMMENT'最后使用时间',`use_count`intDEFAULT'0'COMMENT'使用次数,初始为0',`remark`varchar(128)DEFAULTNULLCOMMENT'备注',PRIMARYKEY(`id`),UNIQUEKEY`session_id`(`session_id`),KEY`idx_user_id`(`user_id`),KEY`idx_session_id`(`session_id`),KEY`idx_token_hash`(`token_hash`),KEY`idx_expires_at`(`expires_at`));

完整流程时序图

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 22:32:25

VSCode如何完美兼容量子硬件?:3个你必须掌握的底层调试技巧

第一章:VSCode 量子硬件的适配测试在探索量子计算与开发环境融合的过程中,VSCode 作为主流代码编辑器,正逐步支持面向量子硬件的开发与调试。通过插件扩展和底层接口调用,VSCode 可实现对量子模拟器及真实量子设备的连接测试&…

作者头像 李华
网站建设 2026/6/13 13:09:35

Zotero文献阅读清单:打造高效学术管理系统的终极指南

Zotero文献阅读清单:打造高效学术管理系统的终极指南 【免费下载链接】zotero-reading-list Keep track of whether youve read items in Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-reading-list 在信息爆炸的时代,学术研究者常…

作者头像 李华
网站建设 2026/6/12 2:14:39

57、Linux系统常见问题排查与解决指南

Linux系统常见问题排查与解决指南 1. PAM与登录问题 在进行系统认证时,若 /etc/pam.d/system - auth 无任何消息,可查看认证部分的第二行。建议登录系统并修改 /etc/pam.d/login 文件来确定修改结果,同时留一个虚拟终端保持登录,避免因修改文件出错而进入救援模式。若…

作者头像 李华
网站建设 2026/6/11 9:31:40

Docker Offload延迟太高怎么办?:3步实现微秒级响应的优化实践

第一章:Docker Offload 的延迟优化在高并发容器化场景中,Docker Offload 技术被广泛用于将网络数据包处理任务从主 CPU 卸载到专用硬件或协处理器,以降低延迟并提升吞吐量。通过合理配置内核模块与 Docker 运行时参数,可显著减少容…

作者头像 李华
网站建设 2026/6/13 12:24:34

同城校园外卖跑腿APP小程序开发代取代拿多平台配送程序定制开发

技术架构设计采用微服务架构,模块化拆分订单管理、骑手调度、支付系统等核心功能。后端使用Spring Cloud或Node.js,数据库选用MySQL分库分表处理高并发订单,Redis缓存热点数据如骑手实时位置。多平台配送对接集成美团、蜂鸟等第三方配送API&a…

作者头像 李华
网站建设 2026/6/13 11:44:29

QLC+终极指南:如何用免费软件打造专业级舞台灯光?

QLC终极指南:如何用免费软件打造专业级舞台灯光? 【免费下载链接】qlcplus Q Light Controller Plus (QLC) is a free and cross-platform software to control DMX or analog lighting systems like moving heads, dimmers, scanners etc. This project…

作者头像 李华