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

双Token机制是一种用于用户认证和授权的安全方案,主要包括两个关键组件:Access Token 和Refresh 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的有效期较短,即使被盗用,也不会导致长时间的安全风险。

相关推荐
考虑考虑30 分钟前
瀚高数据库
数据库·后端·postgresql
锋行天下1 小时前
DeepSeek写Langgraph就是个大傻逼,一本正经胡说八道
前端·人工智能·后端
frjc2 小时前
分布式服务拆分实战指南:从底层逻辑到面试话术
微服务·面试·职场和发展
考研保研资料分享2 小时前
2025生科保研北大直博:英语摘要、科研PPT与赶场复盘
面试
香蕉大香蕉(06敬畏市场)3 小时前
MySQL 单点详解(01)
java·数据库·mysql·面试·博客·实习
小小张说故事3 小时前
Python 的 str 为什么设计成不可变?拆开字符串驻留、字符串池,以及 += 拼接到底慢在哪
后端·python
ShineWinsu3 小时前
对于Qt:QCheckBox常见属性的详细解析
c++·qt·面试·笔试·gui·qcheckbox·多选框
师夷长技以自愈3 小时前
第 3 讲:多 Agent——Supervisor 分诊 + 专职 Worker
面试
AI架构师之家3 小时前
我把 Hermes 这匹"马"养了两周,它干了一件让我有点发毛的事
后端
dpharness3 小时前
块协议用了两周,我把九个坑按顺序记下来了
后端