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

相关推荐
星蓝_starblue9 小时前
零服务器、零数据库!开源growth-board,利用GitHub自动管理刷题/学习/求职全流程
服务器·数据库·程序人生·系统架构·node.js·github·改行学it
夏天的峰没有风9 小时前
Typora加github加PicGo搭建图床使用教程
github·claude code
江南十四行10 小时前
Spring框架核心(上)——IoC控制反转与DI依赖注入详解
java·后端·spring
IT_陈寒10 小时前
Redis缓存击穿把我坑惨了,原来这样设过期时间才靠谱
前端·人工智能·后端
Liekkas Kono11 小时前
Github Star History 趋势图工具推荐
github·swhl
妙码生花11 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(五十二):管理员权限检查中间件,AI 随意放行预闯大祸
前端·后端·go
创安电气研究所11 小时前
用 Node.js 将变频器运行数据接入 MQTT
后端
董员外11 小时前
RAG 系统进化论(八):Agentic RAG(智能体式 RAG),从回答问题到完成任务
人工智能·后端·设计模式
逛逛GitHub11 小时前
盘点 2 个看起来贼炫酷酷酷的 GitHub 项目,炒的还挺火的。
github
大勇前进12 小时前
告别 div 满天飞,HTML5 语义化标签真的有必要用吗?
后端