双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的有效期较短,即使被盗用,也不会导致长时间的安全风险。

相关推荐
考虑考虑2 小时前
docker compose V2版本新属性
运维·后端·自动化运维
尾善爱看海4 小时前
Vue 面试收官篇:SSR、性能优化落地、30 道高频面试题精讲(附标准答案)
前端·javascript·vue.js·面试·vue
GreenTea5 小时前
7000 万 QPS、500 PB:OpenAI 如何用一个 Python 存储平台撑住 10 亿用户
后端·架构
Flynt5 小时前
Java 27 升级实测:默认值动得比新特性多,有个老参数会让 JVM 直接起不来
java·jvm·后端
Bs_MoneyMagnet5 小时前
基于springboot+vue的个人健康管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·vue3·springboot3·计算机毕业设计
GreenTea5 小时前
OpenAI Agents API 上手实测:一次调用把整个 agent loop 甩给 OpenAI
前端·后端·算法
niucloud-admin5 小时前
JAVA V6 多商户商城 开发文档——job 计划任务开发
java·python·github
Bs_MoneyMagnet8 小时前
基于springboot+vue的心理咨询预约与随访平台的设计与实现 源码+文档
vue.js·spring boot·后端·spring·毕业设计·旅游·计算机毕业设计
IT_陈寒8 小时前
Vue的响应式更新把我坑惨了,原来问题出在这
前端·人工智能·后端
陌シ未央ゞ9 小时前
基于BM25算法和RRF实现的混合索引(java版)
人工智能·spring boot·后端·算法