token自动续期实现

实现自动登录 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. {

    1. "username":"laingjf",

    1. "password":"123456"

    1. }

返回:

    1. {

    1. "code":1,

    1. "message":"OK",

    1. "data":{

    1. "uuid":"5e4eb0f2453343e98919b930d8fcee52"

    1. }

    1. }

登录

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

请求:

    1. {

    1. "username":"laingjf",

    1. "password":"123456"

    1. }

返回:

    1. {

    1. "code":1,

    1. "message":"OK",

    1. "data":{

    1. "token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NjY5NzA5NDcsImlhdCI6MTU2Njk3MDkyNywiaWQiOjEsIm5iZiI6MTU2Njk3MDkyNywidXNlcm5hbWUiOiJsYWluZ2pmIn0.pB5-TERuhSLogg-kdarK5J29LedfZJutaWi9IxeECs0",

    1. "refreshToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NjY5NzA5ODcsImlhdCI6MTU2Njk3MDkyNywiaWQiOjEsIm5iZiI6MTU2Njk3MDkyNywidXNlcm5hbWUiOiJsYWluZ2pmIn0.YkMm-a5Krp9b4Hsgxpod0y7KrLGMJJPlqkj83SKefmQ"

    1. }

    1. }

评论服务

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

headers Authorization :Bearer token

请求:

    1. {

    1. "topic_id":10,

    1. "topic_type":"sport",

    1. "content":"我来评论了,你好帅啊",

    1. "from_uid":1

    1. }

返回:

    1. {

    1. "code":1,

    1. "message":"OK",

    1. "data":null

    1. }

刷新过期token

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

headers Authorization :Bearer refreshToken

请求:

    1. {

    1. "code":1,

    1. "message":"OK",

    1. "data":{

    1. "token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NjY5NzA5NDcsImlhdCI6MTU2Njk3MDkyNywiaWQiOjEsIm5iZiI6MTU2Njk3MDkyNywidXNlcm5hbWUiOiJsYWluZ2pmIn0.pB5-TERuhSLogg-kdarK5J29LedfZJutaWi9IxeECs0",

    1. "refreshToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NjY5NzA5ODcsImlhdCI6MTU2Njk3MDkyNywiaWQiOjEsIm5iZiI6MTU2Njk3MDkyNywidXNlcm5hbWUiOiJsYWluZ2pmIn0.YkMm-a5Krp9b4Hsgxpod0y7KrLGMJJPlqkj83SKefmQ"

    1. }

    1. }

以上是 token自动续期实现 的全部内容, 来源链接: www.h5w3.com/123175.html

回到顶部