rsa加密算法(不依赖第三方存储,用RSA加密解密来实现token验证,怎么用算法实现token只能用一次)

2022-09-24 09:27

对于一些安全性要求高的系统或者请求一些受保护的资源时,我们要进行鉴权,以判断此次请求是否是被允许的,这里我们就会用到Token机制。Token是由服务器端签发给客户端的,出于性能开销的考虑,一般情况下的Token在一段时间范围内是可以反复使用的,如果你想实现同个Token只能使用一次,也是有方案的。

Token是什么?为什么要使用Token?

Token是令牌的意思,一般在登录系统、API认证、密保、邀请码中被广泛使用,它是由服务器端产生的。

Token工作流程大概是这样:

  • 调用方使用用户名及密码向服务器端进行请求认证;

  • 若服务器端认证成功,则生成唯一的Token并返回给客户端;

  • 客户端下次请求任何资源时都会把Token带上,交给服务器端进行权限鉴证,以此来证明此次请求的合法性。

这种机制是不是和Session/Cookie很像?那为什么要用Token呢?原因很简单:

  • Token具有无状态性,适用于分布式系统,可在多个服务间共享;

  • Token可避免CSRF攻击

  • Token能避开同源策略的限制等。

同个Token只能使用一次的实现方案

1、借助Redis来控制Key失效时间(实施成本低,推荐此方法)

我们可以把Token作为Redis中的某个Key,同时设置TTL,当此Token使用过一次后就删除Redis中对应的Key即可。

2、Token重新签发(存在性能问题)

一个Token原始数据(加密之前的数据)中应包含一个时间戳,当服务器端拿到客户端传递过来的Token时先判断是否合法,若合法则解析Token,拿出里面的数据,将时间戳改为当前,然后重新计算生成新的Token并返回给客户端。

这种方法虽很安全,但考虑到RSA等加密也是要消耗CPU性能的,这块需要综合考虑。

以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!

上一篇:unity引擎(学习Unity引擎更好还是学习UE4引擎更好)
下一篇:udp和tcp的区别(TCP协议和UDP协议有什么区别)
图文资讯
返回顶部小火箭