双Token机制:安全与便利的完美结合

双Token机制是一种用于用户认证和授权的安全方案,主要包括两个关键组件:Access TokenRefresh Token。这种机制旨在提高系统的安全性和用户体验。

双Token机制的组件

1. Access Token(访问令牌)

  • 作用:用于直接访问受保护的资源。
  • 有效期:相对较短,通常为几分钟到几小时(例如1小时)。
  • 使用方式:每次用户请求受保护资源时,都需要在请求头中携带Access Token进行身份验证。

2. Refresh Token(刷新令牌)

  • 作用:用于在Access Token过期后获取新的Access Token。
  • 有效期:较长,可以设置为几天甚至更长(例如1天)。
  • 使用方式:Refresh Token不会频繁传输,通常只在获取新Access Token时使用,并安全地存储在客户端或服务器端

双Token机制的工作流程

  1. 用户登录:用户通过用户名和密码等凭证登录系统,服务器验证通过后,生成Access Token和Refresh Token,并将这两个Token返回给客户端。

    javascript 复制代码
    javascript
    // 示例:服务器返回Token
    const response = {
      accessToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaGFuIjoiMjMwfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c',
      refreshToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaGFuIjoiMjMwfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'
    };
    localStorage.setItem('accessToken', response.accessToken);
    localStorage.setItem('refreshToken', response.refreshToken);
  2. 访问受保护资源:用户在访问受保护资源时,需要在请求头中携带Access Token。

    javascript 复制代码
    javascript
    // 示例:携带Access Token访问资源
    axios.defaults.headers.common['Authorization'] = `Bearer ${localStorage.getItem('accessToken')}`;
  3. 检测Token过期:如果Access Token过期,客户端使用Refresh Token请求新的Access Token。

    javascript 复制代码
    javascript
    // 示例:使用Refresh Token刷新Access Token
    function refreshToken() {
      axios.post('/api/refreshToken', {
        refreshToken: localStorage.getItem('refreshToken')
      }).then(response => {
        localStorage.setItem('accessToken', response.data.accessToken);
        localStorage.setItem('refreshToken', response.data.refreshToken);
      }).catch(error => {
        // 处理刷新Token失败或者Refresh Token过期的情况
      });
    }
  4. 服务器验证并返回新Token:服务器验证Refresh Token有效后,返回新的Access Token(和可选的新的Refresh Token)。

双Token机制的优点

  • 安全性高:Access Token的短有效期减少了被盗用的风险,而Refresh Token的长有效期和较少传输提高了安全性
  • 用户体验好:用户可以在一定时间内保持登录状态,不需要频繁登录
  • 服务器负担小:服务器只需要验证Access Token,减少了服务器的负担

应用场景

双Token机制广泛应用于需要高安全性和良好用户体验的场景,如Web应用、移动应用和API服务

示例场景

假设有一个用户需要在后台管理界面上操作6个小时。使用双Token机制,用户可以在Access Token过期后使用Refresh Token获取新的Access Token,从而无需重新登录,提高了用户体验。同时,由于Access Token的有效期较短,即使被盗用,也不会导致长时间的安全风险。

相关推荐
吴声子夜歌13 分钟前
Java面试——Spark原理及应用(二)
java·面试·spark
吴声子夜歌25 分钟前
Java面试——Spark原理及应用(一)
java·面试·spark
吴声子夜歌8 小时前
Java面试——Spring Cloud原理及应用(二)
java·spring cloud·面试
SomeB1oody8 小时前
【RustyML入门】6.3. 并行归约
开发语言·后端·机器学习·rust·教程
黄敬峰9 小时前
一文搞懂 Docker + Dockerfile:从镜像构建到全栈部署
面试
Profile排查笔记9 小时前
指纹浏览器哪个好?从 Profile、代理、权限和自动化能力判断是否适合
前端·人工智能·后端·自动化
用户938515635079 小时前
用 AI 结对编程从 0 搭一个"单词后台管理系统":Next.js + Supabase + Drizzle + shadcn/ui 全记录
后端·postgresql·next.js
爱学习的小邓同学10 小时前
Golang --- (1)第一个Golang程序
开发语言·后端·golang
小灰灰搞电子11 小时前
Rust+Slint 实现的“DNA双螺旋”加载动画源码分享
后端·rust·slint·加载动画
面向Google编程11 小时前
向量库不再囤数据:Milvus 3.0 零拷贝直读数据湖
后端