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

双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`));

完整流程时序图

http://www.zskr.cn/news/116846.html

相关文章:

  • 量子计算任务出错怎么办,手把手教你用Azure CLI提取关键日志
  • Virtio-Win驱动在Windows Server 2025上的实战指南
  • 为什么顶尖量子计算工程师都在用Cirq函数提示?真相令人震惊
  • Obsidian个性化优化方案:打造高效美观的知识管理空间
  • solidworks练习题2
  • 33、文本编辑器nvi与Elvis功能解析
  • 如何快速部署本地AI模型:Lemonade Server完整使用指南
  • vue3 三级路由无法缓存的终终终终终终极解决方案
  • 从零构建Q#-Python项目,精准定位函数调用链的7种高级技巧
  • 27、Vim自动缩进与关键字补全功能全解析
  • 揭秘Docker Buildx构建上下文:5个你必须知道的性能优化技巧
  • 手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
  • VSCode集成Azure QDK的API文档实践(专家级配置全公开)
  • rclone云存储管理实战:从零搭建跨平台数据同步体系
  • AI Agent考试部署频频失败?这3类配置错误你一定遇到过
  • 【SRE专家亲授】:Docker MCP 网关监控面板的7大核心组件详解
  • 从零开始学量子计算,手把手教你用VSCode调试Shor算法
  • JUCE框架实战指南:从零打造专业级音频插件的完整方案
  • VSCode调试量子算法总是崩溃?99%的人都忽略的3个关键设置
  • PULC超轻量图像分类方案:移动端AI部署的终极指南
  • Azure CLI量子任务资源分析指南(内部数据披露,限时公开)
  • 告别复杂命令:5步打造你的专属版本控制系统
  • 黑苹果EFI自动化生成终极指南:三分钟搞定完美配置
  • 运维人必看:学 Go 到底是刚需还是跟风?
  • 【视频异常检测】Knowledge-Guided Textual Reasoning for Explainable Video Anomaly Detection via LLMs
  • 【Cirq代码补全黑科技】:揭秘量子编程高效开发的5大自定义规则
  • Qwen3语音识别技术如何重塑人机交互体验?
  • Cirq代码补全适配实战:从0.4到1.x版本演进中的API变迁与应对策略
  • 【权威发布】2024年MCP量子编程认证考试趋势与应对策略
  • Cirq代码补全不求人(从语法结构到IDE集成全路径解析)