前言
token是为了用户身份信息认证及信息安全性考虑而设置的;用户信息在传递过程中,如果token被劫持掉,劫持者可以在token有效期内对用户账户进行操作,对此我们一般对token设置短时效,以减少账户被盗用时间。 | |
---|---|
双token机制
双token在单token基础上设置两个token:
- Access Token:简称短token,正常的本地存储的用户身份认证token,时效短;过期后需要重新获取。
- Refresh Token:简称长token,出于安全性考虑存储在服务器,当短token过期后,需要根据长token去刷新短token;如果长token也过期了,就需要用户重新登录去重新获取这两个token。
背景机制
如前言所讲,token的短时效性是为了防止用户身份认证信息被劫持后长时间的操作用户账户,因此一般短token过期后我们会设置用户重新登录; | |
---|---|
但是针对特殊场景、特殊需求,当一个场景为项目需要长时间在线时,为了用户体验(避免用户在浏览途中不断的重新登录),我们需要做到一定时间段内的无感登录; | |
---|---|
因此可以使用双token机制,短token过期后,用长token去刷新短token,做到无感登录,当长token过期后重新登录。 |
安全机制
可能会有人问:
- 直接把token设置为长时间不就可以了吗?
首先,token就是为了防止用户身份信息被劫持后,账户被长时间操作,如果把token设置很长时效,就背离了token设置的初衷。
- 短token被劫持后,不是一样可以刷新长时间使用吗?
这个需要使用一些判断机制,具体机制可以根据项目实际情况设置,举个例子可以使用一个地理位置机制,当刷新短token时,可以检测登录地点与当前要刷新地点的位置是否一样;短token的刷新不是无脑刷新的,这个判断机制根据实际情况自行设置。
- 劫取长token不就可以无限操作了吗?
首先,长token是放置在服务器的,你的长token被截取时,就说明你们的项目服务器已经G了,这个时候还需要考虑token问题吗?就好似别墅的钥匙被人偷了,你可以换一把锁,当你的别墅门都没有了,还需要考虑换锁吗?
双token总结
双token机制额可以维护账户安全性,保证活跃用户的使用体验,Refresh Token有效期内无感登录,但是使用在特定场景,一般使用在需要长时间在线的项目。