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

相关推荐
独自破碎E9 分钟前
怎么实现一个滑动验证码功能?又如何防止被机器识别破解
java·spring boot·后端
superman超哥1 小时前
Rust 发布 Crate 到 Crates.io:从本地到生态的完整旅程
开发语言·后端·rust·crate·crates.io
lifewange1 小时前
Git/Gitee/GitHub有什么区别
git·gitee·github
Clarence Liu1 小时前
用 Go 从 100 亿个数中找到最小的 100 个数 —— 实战与原理
开发语言·后端·golang
独自归家的兔2 小时前
基于 cosyvoice-v3-plus 的简单语音合成
人工智能·后端·语音复刻
踏浪无痕2 小时前
从 node-exporter 学如何写出可复用的监控指标
运维·后端·架构
努力学算法的蒟蒻2 小时前
day49(12.30)——leetcode面试经典150
算法·leetcode·面试
wanghowie2 小时前
01.01 Spring核心|IoC容器深度解析
java·后端·spring
222you2 小时前
智慧社区:调用腾讯云的人脸识别接口完成人脸采集的功能
云计算·github·腾讯云
Java中文社群2 小时前
国内直连GPT、Claude和Gemini?N8N这次更新真的绝了!
人工智能·后端