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