对于一些安全性要求高的系统或者请求一些受保护的资源时,我们要进行鉴权,以判断此次请求是否是被允许的,这里我们就会用到Token机制。Token是由服务器端签发给客户端的,出于性能开销的考虑,一般情况下的Token在一段时间范围内是可以反复使用的,如果你想实现同个Token只能使用一次,也是有方案的。
Token是什么?为什么要使用Token?
Token是令牌的意思,一般在登录系统、API认证、密保、邀请码中被广泛使用,它是由服务器端产生的。
Token工作流程大概是这样:
这种机制是不是和Session/Cookie很像?那为什么要用Token呢?原因很简单:
同个Token只能使用一次的实现方案
1、借助Redis来控制Key失效时间(实施成本低,推荐此方法)
我们可以把Token作为Redis中的某个Key,同时设置TTL,当此Token使用过一次后就删除Redis中对应的Key即可。
2、Token重新签发(存在性能问题)
一个Token原始数据(加密之前的数据)中应包含一个时间戳,当服务器端拿到客户端传递过来的Token时先判断是否合法,若合法则解析Token,拿出里面的数据,将时间戳改为当前,然后重新计算生成新的Token并返回给客户端。
这种方法虽很安全,但考虑到RSA等加密也是要消耗CPU性能的,这块需要综合考虑。
以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!