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,避免用户经常重新登录的主要内容,如果未能解决你的问题,请参考以下文章