前言
在求解token窃取问题中,发现了双Token的使用,这里梳理一下对双Token的理解,在后续去实践一个可靠的应用方案。
首先说一下避免token窃取问题,也就是避免中间人窃取服务器颁发Token,尽管我们设置的Token过期时间足够短,在该有效时间内中间人还是可以凭借Token做一些事情,这里可以使用Https(HTTP+SSL\TLS)协议解决这个问题;HTTPS是由授权机关颁发的凭证,再由这个凭证加密告知服务器对称密钥,而建立的安全通信(不能防止中间人抓包,双方都会像权威机关认证凭证是否合法)。
双Token是由access_token和refresh_token两个组成的,一个是短期有效的access_token,一般有效时间相对不长,30分钟或多或少(实际以场景进行变更),另一个是有效期较长的refresh_token,一般有效期一天或多或少;双Token可以实现长时间凭证有效(保持登录状态)、第三方登录;
提供大家参考,若有问题欢迎指出修改。
双Token授权
access_token 访问token
access_token:与单Token相同,服务器通过辨别access_token辨认该请求是否合法;若是合法用户,则正常访问;若是非法用户,则阻止访问;若 token过期,则通过校验refresh_token是否合法,合法则颁发新access_token,不合法则阻止访问。
这里的access_token过期时间会相对较短一些,肯定会产生疑问,既然有refresh_token为什么还要access_token,不停的更新不麻烦吗?
举例:如果我们颁发一个过期时间较长的token,若该用户出现问题,如何快速阻止该用户继续访问。这里access_token可以解决这个问题,因为access_token的过期时间短,下次需要重新授权时,可以拒绝授权。
refresh_token 刷新token
refresh_token:此token作用于access_token 时,通过refresh_token是否合法颁发access_token ;由于refresh_token是一个长时间有效的,所以建议refresh_token只能使用一次,并且为了避免中间人窃取refresh_token,生成的token条件需要根据访问用户的信息来产生,比如访问IP、MAC一些大概率不重复或者唯一的,进行二次区分,排除中间人窃取refresh_token进行使用。
建议:
- refresh_token只能使用一次
- refresh_token生成规则需要进行设计,避免窃取
- 建议B/S使用HTTPS协议来保证数据加密,不会造成明文传输
参考文章
Access Token & Refresh Token 详解以及使用原则 用 HTTPS 就安全了?HTTPS 会被抓包吗?
|