最近一段时间,突然就生病了,一连休息了这么多天才缓过来劲。不禁生出病来入山倒,病去如抽丝的感慨,因此决定以后的日子一定要多注意自己的身体,能锻炼就要坚持做一些锻炼。这段时间也想了许多事情,内心也有许多冲动,总是感觉要做的东西太多,也想明白了以后要做些什么事情。
今天有空分享一个小的知识点。网站登录后都要做一个验证,保护网站的安全。计算机技术发展这么多年,安全验证的技术也是很多种,大家熟悉有: BaseAuth, Oauth, Oauth2,基于Token的认证等机制。现在比较流行,大家常用的就是token认证的方式。接下来说的就是Token验证的机制,关于这种机制只需要弄明白几个问题,就可以搞清楚这种机制的原理及实现。首先是token生成及存储的问题,其次是token过期时间的问题,最后是怎么保证用户使用状态下token持续时间的一直有效。
token的生成一般是采用uuid保证唯一性,当用户登录时为其生成唯一的token,存储一般保存在数据库中。token过期时间采用把token二次保存在cookie或session里面,根据cookie和session的过期时间去维护token的过期时间。至于采用那种存储一般需要根据应用程序部署的环境,如果你的应用部署在多台机器上,使用nginx进行负载均衡,那么需要把token二次保存在cookie中。
最后一个问题的解决需要依赖框架的一种机制,大家应该都挺熟悉的,那就是aop技术(面向切面编程),在Yii2框架里面一般采用behavior来实现,主要内容就是在给用户行为的api controller添加一个before action。在action里面,从cookie中获取token,拿取用户信息,如果用户有操作的权限,就根据当前时间去更新cookie的过期时间,从而维护token的持续时间,使得token在给定时间内不会过期,这样可以使用户的操作体验达到最佳,又能起到保护程序安全的作用。