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

【分布式技术】Baerer token刷新机制详细解读

Baerer token刷新机制详细解读

      • 1. 核心概念:为什么需要刷新?
      • 2. 核心组件:Access Token 和 Refresh Token
      • 3. 标准刷新流程(OAuth 2.0 / OpenID Connect)
      • 4. 安全最佳实践
      • 总结
    • 相关文献

1. 核心概念:为什么需要刷新?

Bearer Token(通常是 JWT - JSON Web Token)有一个关键特性:无状态性。服务器验证 token 时不需要查询数据库,仅通过加密签名即可确认其有效性。这带来了性能优势,但也引入了一个问题:

  • 令牌过期(Expiration): 为了安全,Access Token 的生命周期通常很短(例如 15 分钟、1 小时)。如果 token 被盗,短的有效期可以限制攻击者的操作时间。
  • 用户体验: 如果 token 过期后就让用户重新登录,体验会非常差。

刷新机制就是为了解决这个矛盾而生的:在用户不知情的情况下,用一个安全、长效的凭证(Refresh Token)去获取一个新的 Access Token

2. 核心组件:Access Token 和 Refresh Token

一个完整的令牌刷新机制包含两种令牌:

令牌类型目的生命周期存储位置安全性要求
Access Token访问受保护资源(如 API 接口、用户数据)。像一把临时门禁卡(几分钟到几小时)客户端内存(通常放在 Authorization HTTP 头中)高。虽然生命周期短,但泄露后攻击者仍可在有效期内滥用。
Refresh Token用于获取新的 Access Token。像一把长效的、权限受限的“续卡凭证”(几天、几周、甚至数月)安全的持久化存储(如 HttpOnly Cookie,防止 XSS 攻击)极高。它是获取新 Access Token 的钥匙,泄露后果严重。

3. 标准刷新流程(OAuth 2.0 / OpenID Connect)

这是最经典和安全的流程,遵循 RFC 6749 标准:

  1. 用户登录

    • 用户提供凭证(如用户名/密码)。
    • 认证服务器验证成功后,同时返回一个 access_token 和一个 refresh_token
  2. 访问资源

    • 客户端(如前端应用)使用 access_token 调用受保护的 API。
    • API 网关或资源服务器验证 access_token 的签名和有效期。
  3. Access Token 过期

    • 当客户端再次用过期的 access_token 调用 API 时,会收到 401 Unauthorized 错误。
  4. 发起刷新请求

    • 客户端检测到 Access Token 过期后,不提示用户登录,而是自动向认证服务器的 token 端点发起一个特殊请求。
    • 请求示例
      POST /oauth/token HTTP/1.1
      Host: auth.server.com
      Content-Type: application/x-www-form-urlencodedgrant_type=refresh_token
      &client_id=your_client_id
      &client_secret=your_client_secret (如果适用)
      &refresh_token=your_refresh_token_value
      
  5. 认证服务器验证

    • 服务器会做一系列严格检查:
      • 检查 refresh_token 是否存在且有效。
      • 检查 refresh_token 是否未被撤销。
      • 检查提交 refresh_token 的客户端身份(client_id/client_secret)是否与最初签发该 token 的客户端匹配。
    • 这是关键的安全步骤,确保了即使 Access Token 泄露,攻击者也无法获取新的令牌。
  6. 颁发新令牌

    • 验证通过后,认证服务器生成新的 access_token新的 refresh_token
    • 为什么刷新令牌也要更新? 这被称为“刷新令牌轮换”(Refresh Token Rotation),是一种安全最佳实践。它确保了每次使用刷新令牌后,旧的都会失效,从而防止重复使用。
  7. 客户端更新令牌

    • 客户端收到响应后,用新的 access_tokenrefresh_token 替换掉旧的,然后使用新的 access_token 重试之前失败的 API 请求。用户对此过程无感知。
无效
有效
用户登录
认证服务器颁发
Access Token + Refresh Token
客户端使用 Access Token
访问API资源
Access Token 是否过期?
客户端使用 Refresh Token
向认证服务器请求新令牌
认证服务器验证
Refresh Token 有效性
刷新失败
引导用户重新登录
认证服务器颁发
全新的 Access Token
和全新的 Refresh Token
客户端更新令牌

4. 安全最佳实践

  1. 安全的存储方式

    • Access Token: 存储在内存或临时存储(如 Session Storage)中。避免存入 LocalStorage,以防 XSS 攻击读取。
    • Refresh Token最佳实践是存储在 HttpOnlySecureSameSite=Strict 的 Cookie 中。这能有效防御 XSS(JavaScript 无法读取 HttpOnly Cookie)和 CSRF(SameSite 属性提供保护)攻击。
  2. 设置合理的有效期

    • Access Token: 尽量短(15-30 分钟)。
    • Refresh Token: 可以较长,但应有绝对上限(如 30 天)。也可以实现滑动过期(每次使用刷新后,有效期从当前时间重新计算)。
  3. 刷新令牌轮换: 每次使用刷新令牌后,都使其立即失效并颁发一个新的。这能帮助检测令牌是否被盗(如果合法客户端和攻击者同时使用同一个刷新令牌,服务器会检测到异常并撤销所有相关令牌)。

  4. 撤销机制: 提供管理员或用户自己主动撤销刷新令牌的能力(例如用户点击“退出所有设备”)。

  5. 范围限制: 可以为 Refresh Token 设置更小的权限范围,确保它只能用于获取新的 Access Token,而不能做其他事情。

总结

Bearer Token 的刷新机制是一种优雅的安全与用户体验的平衡方案。它通过将令牌分为短命的 Access Token长命但受保护的 Refresh Token,实现了:

  • 安全性: 限制了 Access Token 暴露的时间窗口。
  • 用户体验: 用户无需频繁输入密码。
  • 控制力: 服务器可以通过使 Refresh Token 失效来强制登出用户。

在实现时,务必严格遵守安全最佳实践,尤其是在令牌的存储和传输上。

相关文献

【分布式技术】Bearer Token以及MAC Token深入理解
小白也能看懂的OAuth2讲解

http://www.dtcms.com/a/394431.html

相关文章:

  • 第十三章 Ant与Jenkins的集成
  • 通义万相正式开源Wan2.2-Animate动作生成模型
  • 课后作业-2025-09-21
  • 比 IDEA 容器自动化部署更轻量便捷的工具
  • 知识图谱技术对自然语言处理深层语义分析的影响与启示研究
  • Javase 高级技术 —— 01 反射
  • Linux 孤儿进程与进程的优先级和切换和调度
  • QML学习笔记(七)QML的基本数据类型
  • 基于51单片机电子钟闹钟12/24小时制LCD显示
  • 小程序开发全解析:从结构到API
  • 异步方法在C#中的使用
  • js时间戳转换日期格式 yyyy-mm-dd
  • 信号处理方法概述
  • 固定收益理论(五)债券投资归因模型
  • 【论文速递】2025年第18周(Apr-27-May-03)(Robotics/Embodied AI/LLM)
  • 3D视觉——求出目标物体在相机坐标系下的位姿信息
  • 固态和机械硬盘损坏后的不同
  • Linux 基础IO
  • pandawiki ai 无法生成摘要
  • m语言可视化log中的变量信息
  • MySQL:库操作和常用数据类型
  • uniapp实现view块级元素横竖屏切换
  • 【编号74】河北地理基础数据(道路、水系、四级行政边界、地级城市、DEM等)
  • Python: 将wxauto发布为接口,并部署为Windows服务
  • 2025年度SEO优化公司
  • 基于Markdown的静态网站生成器完全指南
  • hot100——第十一周
  • 嵌入式(2)——HAL_GetTick()
  • 《第18课——C语言结构体:从Java的“豪华别墅“到C的“集装箱宿舍“——内存对齐、位域抠门与指针破门的底层狂欢》
  • 旅游线路预约小程序怎么搭建?景区售票团购小程序怎么做?