WEB安全token的续签问题-即动态刷新token,避免用户经常重新登录

Posted jinyangjie0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WEB安全token的续签问题-即动态刷新token,避免用户经常重新登录相关的知识,希望对你有一定的参考价值。

token有效期一般都设置得很短,那么token过期后如何动态刷新token,避免用户经常重新登录呢?

来看个具体需求:

超过2个小时后,用户没有请求,则需要重新登录。

这个需求一般有两种实现方式。

方式一 每次请求都返回新 token

假设一个 token 的签发时间为 12:00,需求为 2h 未进行请求即过期。则设置有效期 2h,那么每次请求都会把一个 token 换成一个新 token。如果 2h 没有进行请求,那么上一次请求的到的 token 就会过期,需要重新登录。不断签就能一直使用下去。

这种方式实现思路很简单,但开销比较大。

问题一:每次都刷新 token,带来的性能影响如何?

以前每次请求,需要进行一次 token 签名校验,而现在是要签发一个新 token,进行的都是一次签名运算,那么运算量即从 n 变成 2n。

其次,每次刷新都要把旧 token 加入黑名单,会导致黑名单特别大。

问题二:每次都刷新 token,并发请求时会不会因为 token 刷新而导致只有一个请求成功?

答案是确实会导致这个问题,怎么解决呢?设置一个宽限时间,每次 token 刷新后,原来逻辑应该是立刻不可用,现在设置一个宽限时间,让其在 n 秒之内仍然可用即可。

方式二 用户登录返回两个 token

第一个是 accessToken ,它的过期时间 token 本身的过期时间2个小时,另外一个是 refreshToken 它的过期时间更长一点比如为1天。客户端登录后,将 accessToken和refreshToken 保存在本地,每次访问将 accessToken 传给服务端。服务端校验 accessToken 的有效性,如果过期的话,就将 refreshToken 传给服务端。如果有效,服务端就生成新的 accessToken 给客户端。否则,客户端就重新登录即可。

该方案的不足是:

1、需要客户端来配合;

2、用户注销的时候需要同时保证两个 token 都无效;

3、重新请求获取 token 的过程中会有短暂 token 不可用的情况(可以通过在客户端设置定时器,当accessToken 快过期的时候,提前去通过 refreshToken 获取新的accessToken)

测试报告 alpha

测试报告

遇到的bug

  • 遇到了线程安全的bug,bug的原因是必须在调用api之前先获取到token,而获取token和调用api都需要新开一个线程,解决方法为通过加锁来解决线程安全问题

  • 遇到了页面的适配问题,在不同的手机上显示的页面差距非常大,解决方法为替换为根据不同屏幕自动调整的relativelayout布局.

  • 动态下滑刷新导致的显示异常bug,解决方法:下滑刷新后清空动态列表

  • 动态推荐、关注、我的、发布来回切换时页面变空白,解决方法:重写fragment的destroy方法

  • 获取到了返回的gson数据,但解析时gson为空. 原因:OnCreatView方法在Handler前执行,将解析部分代码放在Handler内即可

  • 分页获取信息时如果列表数大于100则点击时会崩溃. 原因:设置点击的监听器位置不对,放在第二个Handler下即可

  • xml文件内空间无法重叠放置. 解决方法: 加一层fragmentlayout即可

  • 点击我的作业,如果我的班级中没有作业,会闪退(在加载列表时判断,若为空则不设置数据)

  • 在我的收藏中点进一个内容返回后会多出一些重复的数据(在onresume方法中不设置UI)

  • 退出程序后本地登录退出但网站的登录端没有退出(在加载网页登录api时先清除本地的web缓存以及cookie)

  • 在本地的ui界面和手机上看的不一样(在constraintlayout中加入guideline来约束控件位置)

场景测试

属性 描述
姓名 小王
身份 某高效计算机系学生
知识层次 有一定的计算机知识基础
用户需求 希望可以在手机上浏览博客园的班级中发布的作业
软件对应功能 在博客园app的班级模块提供了作业浏览等功能
使用场景 小王在宿舍躺在床上,使用博客园app随手浏览自己所在班级发布的作业
属性 描述
姓名 张老师
身份 某高校计算机系教师
知识层次 拥有丰富的计算机知识
用户需求 希望可以在手机上查看班级的一些信息,管理班级
软件对应功能 在博客园app上提供了班级功能,可以查看同学们提交作业的情况
使用场景 张老师网上在床上仍关心学生,在手机上使用博客园app查看同学们作业情况
属性 描述
姓名 老李
身份 某公司程序员
知识层次 拥有丰富的计算机从业知识
用户需求 希望可以在手机上随时浏览博客园上的一些博客,问答动态等
软件对应功能 在博客园app上提供了许多博客园在网页端的功能,例如首页,动态,问答等
使用场景 老李在地铁上通过手机上的博客园app来查看博客,然后回答了一些人在博客园发出的问题

测试矩阵

机型/安卓版本 首页页面 动态页面 问答页面 班级页面 我的页面 搜索博客 发布动态 发布问答 登录 页面跳转 图片加载 点击事件
小米/9.0 正常 偶尔加载失败 正常 正常 正常 正常 正常 正常 正常 正常 部分图片加载出现问题 正常
一加/10.0 正常 正常 正常 正常 正常 正常 正常 正常 正常 正常 部分图片加载出现问题 正常
华为/9.0 正常 偶尔加载失败 正常 正常 正常 正常 正常 正常 正常 正常 部分图片加载出现问题 正常
Nexus 5x/9.0 正常 偶尔加载失败 正常 正常 正常 正常 正常 正常 正常 正常 部分图片加载出现问题 正常
谷歌Pixel/9.0 正常 偶尔加载失败 正常 正常 正常 正常 正常 正常 正常 正常 部分图片加载出现问题 正常

出口条件

1、对照alpha阶段的功能表,需完成之前确定的要在alpha阶段完成的所有条件。
2、对软件的所有功能进行了测试,可以正常加载数据,跳转,退出。
3、软件生成apk可以在各个安卓手机上下载并正确安装,不会出现不同手机显示界面不同的问题。

以上是关于WEB安全token的续签问题-即动态刷新token,避免用户经常重新登录的主要内容,如果未能解决你的问题,请参考以下文章

JSON Web Tokens的实现原理

数字化新业态下数据安全创新——Token化

测试报告 alpha

实现无感刷新token我是这样做的

token生成与过期机制(设置伪过期机制)

toke过期失效 ---提示并跳转到登录页面