APP服务端接口,用jwt还是用redis和token,分别有什么优势?

jwt属于无状态设计,用户登陆的信息关键存放在jwt加密数据里,这种设计下服务器不需要存储jwt密文,只需要解密就能拿到授权信息等用户信息。这种设计是一种利用计算力减少token设

本文最后更新时间:  2023-02-27 21:35:16

谢邀。

什么是JWT

JWT(Json Web Token),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。由头部(Header)、负载(Payload)、签名(Signature)三部分构成,其中每一部分使用Base64编码处理。

Header 中存储了所使用的加密算法和 Token 类型。

Payload是负载,JWT 规范规定了一些字段,并推荐使用,当然每一个开发者也可以自己指定字段和内容。需要注意的是,该部分内容只经过了 Base64 编码,相当于明文存储,所以不要放置敏感信息。

而Signature,则是使用Base64编码后的Header 和Payload以及一个秘钥,使用header中指定签名算法进行签名。

可用下面的图对上述概念进行总结:

JWT的优点&问题

JWT属于无状态,不依赖Cookie,可以在禁用Cookie的浏览器中运行,可有效防止CSRF攻击;服务端不用存储session,易于扩展;相比XML更加简洁,更加适合在HTTP环境中传输。

那么JWT都存在哪些问题呢?主要集中在以下几个方面

无法作废已颁布的Token,比如说用户注销这个功能,传统的基于session的方案,只需在服务端删除该session即可,因为状态在服务端存储。而JWT就比较难办到,因为JWT是无状态的,存储在客户端,即使被删除了,一定有效期内服务端并不知道,它仍然是有效的。

无法应对过期的数据

安全机制不够高

JWT适用场景

Restful API无状态验证

一次性验证:比如用户注册某网站后需要发送一封邮件让其激活账户,通常该邮件中包含一个链接,该链接往往含有以下几个特点:能够标识唯一用户、不能被篡改、具有时效性。

Redis & Token

自己生成一个32位的key,value为用户信息,客户端访问时服务端首先判断Redis里是否有该Token,如果有,则加载该用户信息完成登录。服务需要存储下发的每个token及对应的value,维持其过期时间。

本文为作者“一个程序员的奋斗史”问答原创文章,未经允许转载、抄袭必究!

温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。