jwt属于无状态设计,用户登陆的信息关键存放在jwt加密数据里,这种设计下服务器不需要存储jwt密文,只需要解密就能拿到授权信息等用户信息。这种设计是一种利用计算力减少token设
谢邀。
什么是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,维持其过期时间。
本文为作者“一个程序员的奋斗史”问答原创文章,未经允许转载、抄袭必究!