zoukankan      html  css  js  c++  java
  • JWT token过期自动续期解决方案

    JWT

    JWT全称JSON Web Token,由三部分组成header(头部,用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等)、payload(载荷,就是存放有效信息的地方,在这一部分中存放过期时间)和signature(签证,签证信息)。

    token

    token就是后端生成的JWT字符串值,在前后端分离中,token是前端访问后端接口的合法身份、权限的凭证。

    token过期刷新方案

    1、单点登录
    用户登录,后端验证用户成功之后生成两个token,这两个token分别是access_token(访问接口使用的token)、refresh_token(access_token过期后用于刷续期的token,注意设置refresh_token的过期时间需比access_token的过期时间长),后端将用户信息和这两个token存放到redis中并返回给前端。
    前端在获取到登录成功返回的两个token之后,将之存放到localStorage本地存储中。
    2、接口请求
    前端封装统一接口请求函数、token刷新函数,在请求成功之后对返回结果进行校验,如果token过期,则调用token刷新函数请求新的token.
    后端在接收到token刷新请求之后通过结合redis中存放的用户信息、token和refresh_token对请求参数进行验证,验证通过之后生成新的token和refresh_token存放到redis中并返回给前端。至此完成token刷新。
    3、多请求应对
    所谓多请求,就是指在短时间内同时发生多个请求,如果此时token已经过期,那么这些请求都会出现token过期请求失败的情况。
    为了避免反复刷新token,需要设置一个刷新token的开关isRefresh,当一个请求出现token过期的时候,这个时候会调用token刷新函数,与此同时关闭开关将isRefresh的值设置为false,避免后续请求去调用token刷新函数。
    当发现token过期时,咱们将请求延缓到token刷新之后再重新执行请求,这里采用Promise函数,把每一个token失效的请求都存到一个Promise函数集合里面,当token刷新之后打开开关将isRefresh的值设置为true,然后批量执行Promise函数集合里面的Promise函数,返回请求结果。 

  • 相关阅读:
    RequireJS 模块化加载框架使用
    MySQL数据类型(最大值 和 最小值)
    utf-8的中文是一个字符占几个字节
    spring的事务是什么?与数据库的事务是否一样
    事务和锁机制是什么关系? 开启事务就自动加锁了吗?
    关于数据库主键和外键
    浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景
    TCP/IP协议
    分库分表分区需要考虑的问题及方案
    Redis(十一):Redis的事务功能详解
  • 原文地址:https://www.cnblogs.com/shihaibin821/p/13029480.html
Copyright © 2011-2022 走看看