首页
Javascript
Html
Css
Node.js
Electron
移动开发
小程序
工具类

服务端

浏览器相关
前端收藏
其他
关于

实现token自动续期

2019年12月31日 转载自 liangjf 阅读(510)

实现自动登录 JWT Token设置有效期,一旦失效用户就要重新登录,这样的体验非常差,需要做到用户在无感知的情况下,解决如何刷新Token的问题

JWT Token

  • iss: jwt签发者
  • sub: jwt所面向的用户
  • aud: 接收jwt的一方
  • exp: jwt的过期时间,这个过期时间必须要大于签发时间
  • nbf: 定义在什么时间之前,该jwt都是不可用的.
  • iat: jwt的签发时间
  • jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

据所知,微信方案如下:

在第一次用账号密码登录服务器会返回两个 token,时效长短不一样。短的时效过了之后,发送时效长的 token 重新获取一个短时效,如果都过期,就需要重新登录了长的token是一个月,短的是2小时

token刷新方案

登录后服务端返回两个token(请求资源token,刷新token。前者时间短,比如1天,后者时间长,7天)。 资源 token 用于资源接口请求,刷新token 用于请求刷新token。实现首次登录后免登,和token刷新机制。

token命名方式

  • token(用于一般的资源请求)
  • refreshToken(用于请求刷新token,返回两个新的token(短和长))

项目介绍

项目地址:github地址

本项目是使用 go mod 方式,因此需要设置好对应的环境变量和代理。设置好后,在项目根目录直接 go build

测试步骤:

  • 0、配置好自己的ip,portmysql等参数(config.yaml
  • 1、创建数据库和建表(使用create.sql脚本。在于script目录)
  • 2、测试时修改config.yaml的两个时间(shortTime 和 `longTime1),比如短的10s,长的30s。
  • 3、调用 register 接口注册账号
  • 4、调用 login 接口登录
  • 5、根据 login 得到的 token ,调用 comment 接口评论
  • 6、等待 shortTime 后,token失效,使用 refreshtoken 接口再次得到 tokenrefreshToken
  • 7、若 refreshToken 过期失效,再次调用login 接口登录得到 tokenrefreshToken

调用逻辑

注册账号

[POST] http://172.16.0.66:8099/v1/user/register

请求:

  1. {
  2. "username":"laingjf",
  3. "password":"123456"
  4. }

返回:

  1. {
  2. "code": 1,
  3. "message": "OK",
  4. "data": {
  5. "uuid": "5e4eb0f2453343e98919b930d8fcee52"
  6. }
  7. }

登录

[POST] http://172.16.0.66:8099/v1/user/login

请求:

  1. {
  2. "username":"laingjf",
  3. "password":"123456"
  4. }

返回:

  1. {
  2. "code": 1,
  3. "message": "OK",
  4. "data": {
  5. "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NjY5NzA5NDcsImlhdCI6MTU2Njk3MDkyNywiaWQiOjEsIm5iZiI6MTU2Njk3MDkyNywidXNlcm5hbWUiOiJsYWluZ2pmIn0.pB5-TERuhSLogg-kdarK5J29LedfZJutaWi9IxeECs0",
  6. "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NjY5NzA5ODcsImlhdCI6MTU2Njk3MDkyNywiaWQiOjEsIm5iZiI6MTU2Njk3MDkyNywidXNlcm5hbWUiOiJsYWluZ2pmIn0.YkMm-a5Krp9b4Hsgxpod0y7KrLGMJJPlqkj83SKefmQ"
  7. }
  8. }

评论服务

[POST] http://172.16.0.66:8099/v1/service/comment

headers Authorization :Bearer token

请求:

  1. {
  2. "topic_id":10,
  3. "topic_type":"sport",
  4. "content":"我来评论了,你好帅啊",
  5. "from_uid":1
  6. }

返回:

  1. {
  2. "code": 1,
  3. "message": "OK",
  4. "data": null
  5. }

刷新过期token

[POST] http://172.16.0.66:8099/v1/base/refreshtoken

headers Authorization :Bearer refreshToken

请求:

  1. {
  2. "code": 1,
  3. "message": "OK",
  4. "data": {
  5. "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NjY5NzA5NDcsImlhdCI6MTU2Njk3MDkyNywiaWQiOjEsIm5iZiI6MTU2Njk3MDkyNywidXNlcm5hbWUiOiJsYWluZ2pmIn0.pB5-TERuhSLogg-kdarK5J29LedfZJutaWi9IxeECs0",
  6. "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NjY5NzA5ODcsImlhdCI6MTU2Njk3MDkyNywiaWQiOjEsIm5iZiI6MTU2Njk3MDkyNywidXNlcm5hbWUiOiJsYWluZ2pmIn0.YkMm-a5Krp9b4Hsgxpod0y7KrLGMJJPlqkj83SKefmQ"
  7. }
  8. }
© 本文著作权归原作者所有 来源:liangjf 阅读原文

评论

  •  
  • nginx优化跨域的OPTIONS请求

    需要跨域的项目,很多时候每次都会发送OPTIONS请求,能不能优化呢?

    发布:2020-03-07 阅读(136)

  • mongodb之多表关联查询并分页

    mongodb多表关联查询

    发布:2020-02-29 阅读(103)

  • 网易高手:角色权限设计的100种解法

    角色、权限、用户之间的关系,以及如何设计

    发布:2020-02-22 阅读(134)

  • 理解 JWT 的使用场景和优劣

    这样形如 A.B.C 的字符串时能敏感地认出这是使用了 jwt。发了这两篇文章后,有不少读者在文末留言,表达了对 jwt 使用方式的一些疑惑,以及到底哪些场景适合使用 jwt。我并不是 jwt 方面的专家,和不少读者一样,起初研究时我也存在相同疑惑,甚至在逐渐接触后产生了更大的疑惑,经过这段时间项目中的使用和一些自己思考,把个人的总结整理成此文。

    发布:2020-01-09 阅读(124)

  • Idea每次修改jsp都需要重启tomcat解决方法

    发布:2020-01-03 阅读(228)

  • 实现token自动续期

    go语言实现token自动续期

    发布:2019-12-31 阅读(510)

  • nodejs前后端添加RSA加密验证

    RSA加密的玩法

    发布:2019-12-30 阅读(259)

  • 使用OpenSSL生成RSA公钥和私钥

    发布:2019-12-29 阅读(178)

  • MongoDB unique唯一索引值,如何支持空值 ?

    发布:2019-12-29 阅读(164)

  • 捕获mongoose save()报错并返回Controller

    捕获save报错,返回controller

    发布:2019-12-29 阅读(137)

  • windows下安装配置nginx 反向代理

    win10下安装nginx,配置返向代理

    发布:2019-12-11 阅读(154)

  • Client does not support authentication protocol requested by server

    ERROR 9076 nodejs.SequelizeConnectionError: Client does not support authentication protocol requested by server; consider upgrading MySQL client

    发布:2019-09-01 阅读(383)

  • Linux rpm命令详解

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序

    发布:2019-08-02 阅读(403)

  • Linux中apt与apt-get命令的区别与解释

    Ubuntu 16.04 发布时,一个引人注目的新特性便是 apt 命令的引入。其实早在 2014 年,apt 命令就已经发布了第一个稳定版,只是直到 2016 年的 Ubuntu 16.04 系统发布时才开始引人关注。随着 apt install package 命令的使用频率和普遍性逐步超过 apt-get install package,越来越多的其它 Linux 发行版也开始遵循 Ubuntu 的脚步,开始鼓励用户使用 apt 而不是 apt-get。

    发布:2019-03-04 阅读(636)

  • centos7设置、查看、删除环境变量的方法

    centos查看环境变量与设置环境变量在使用过程中很常见,本文整理了一些常用的与环境变量相关的命令,感兴趣的朋友可以参考下希望对你有所帮助

    发布:2018-12-27 阅读(1721)

  • linux CentOS 安装oh my Zsh

    linux cenos下安装oh my zsh,oh my zsh 用于管理zsh配置,使shell界面更美观。 Zsh 是一款功能强大终端(shell)软件,既可以作为一个交互式终端,也可以作为一个脚本解释器。它在兼容 Bash 的同时 (默认不兼容,除非设置成 emulate sh) 还有提供了很多改进。

    发布:2018-12-20 阅读(1969)

  • Nginx配置SSL证书,实现https访问

    以腾讯云为例,配置nginx,实现https访问

    发布:2018-11-23 阅读(1030)

  • nginx设置二级域名指向子目录

    nginx设置二级域名指向子目录

    发布:2018-11-22 阅读(1307)

  • nginx性能优化

    发现ip访问比nginx快多了,知道nginx出问题了~ 得给他优化优化。优化后由原来的2.7s打开,到600ms打开~nginx优化还是有用的

    发布:2018-11-22 阅读(627)

  • Nginx开启gzip

    通过nginx开启gzip设置

    发布:2018-10-15 阅读(641)

  • linux云服务通过Nginx绑定多个域名

    通过Nginx反向代理,在一个云服务器上绑定多个域名,不同的域名访问不同的目录,端口

    发布:2018-10-11 阅读(959)

  • CentOS 7上安装Nginx

    如何在Linux(CentOS 7)上安装Nginx,作为反向代理服务器。

    发布:2018-10-11 阅读(819)

  • nginx实现CORS跨域配置

    nginx服务端实现CORS跨域配置

    发布:2018-06-20 阅读(96)

  • 关于UUID的二三事

    UUID,是Universally Unique Identifier的缩写,UUID出现的目的,是为了让分布式系统可以不借助中心节点,就可以生成UUID来标识一些唯一的信息;

    发布:2017-06-26 阅读(118)

  • tail命令详情

    命令从指定点开始将 File 参数指定的文件写到标准输出。如果没有指定文件,那么会使用标准输入。Number 变量指定将多少单元写到标准输出。Number 变量的值可以是正的或负的整数。如果值的前面有 +(加号),从文件开头指定的单元数开始将文件写到标准输出。如果值的前面有 -(减号),那么从文件末尾指定的单元数开始将文件写到标准输出。如果值前面没有 +(加号)或 -(减号),那么从文件末尾指定的单元号开始读取文件

    发布:2017-05-23 阅读(771)

  • 如何防止网站被爬虫爬取的几种办法

    今天想对一个问题进行分析和讨论,就是关于爬虫对网站页面爬取的问题,有些网站通过爬虫去采集其它的网站页面信息作为己用,大量的爬取行为会对web服务器有比较性能有影响,主要的表现就是会变得很慢。

    发布:2014-05-26 阅读(97)

  • 网站设置301转各的各种方法

    将不带www的域名301重定向到带www的域名,利于SEO

    发布:2013-11-29 阅读(626)