当前位置: 首页 > 网络应用技术

JWT登录认证和令牌自动更新解决方案解释

时间:2023-03-07 23:25:19 网络应用技术

  过去,这次主要负责项目中的用户管理模块。用户管理模块将涉及加密和认证过程。加密已在上一篇文章中引入。您可以阅读用户管理模块:

  https://juejin.cn/post/6916150628955717646

  今天,让我们谈谈身份验证功能的技术选择和实施。没有技术困难,也没有挑战,但这也是尚未在身份验证功能中写入的蔬菜鸡的一种锻炼。

  要实施身份验证功能,很容易想到JWT或会话,但是两者之间有什么区别?优点和缺点?应该选择谁?

  会话和基于JWT的方法之间的主要区别是用户状态的位置。会话保存在服务器上,JWT保存在客户端上

  基于会话的身份验证过程基于JWT认证过程JWT存储在客户端上,并且在分布式环境中没有其他工作。由于会话保存在服务器上,因此在分布式环境中保存了多机械数据共享会话需要将cookie的组合来实施认证,因此浏览器需要支持cookie。因此,移动终端无法使用会话认证方案

  JWT的有效载荷使用base64编码,因此敏感数据不能存储在JWT中。会话的信息是服务器,这相对更安全

  如果您将敏感信息存储在JWT中,则可以解码非常不安全

  编码后,JWT会很长。饼干的限制通常为4K。cookie可能不会被放置,因此JWT通常放在本地存储中。系统中的每个HTTP请求都会在标题中携带JWT,并且HTTP请求标头可能比身体大。sessionID只是一个简短的字符串。,因此JWT的HTTP请求的使用要比使用费用多支出要大得多。

  JWT的特征没有任何状态,但也导致了这个问题。jwt是一个 - 时间。如果您想修改内容,则必须发布新的JWT

  一旦发出JWT,它将始终在到期之前有效,并且不能中途放弃。如果您想放弃,一种常用的处理方法是将Redis结合起来

  如果您使用JWT进行会话管理,则通常是自行构建的传统cookie续订方案。会议期有效期为30分钟。如果在30分钟内有访问权限,则有效期将刷新到30分钟。相同的原因,要更改JWT的有效时间,您必须发布新的JWT。

  最简单的方法是每次刷新JWT,也就是说,每个HTTP请求都会返回一个新的JWT。此方法不仅不是优雅,而且还需要JWT的加密和解密,每个请求都会带来性能问题。是为Redis中的每个JWT设置到期时间,并在每次访问期间刷新JWT的到期时间

  我投票支持JWT,JWT有很多缺点,但是在分布式环境中,您不需要实现像会话这样的多机数据共享。尽管可以共享SeeSion的多机器数据共享,但会话共享,会话复制,持久性会话,但Terracoa实现了各种成熟的解决方案,例如SeeSion Replication来解决此问题。但是JWT不需要额外的工作。使用JWT吗?可以与Redis结合使用JWT?

  长期和缺点,因此在实际项目中,选择使用JWT进行身份验证

  JWT需要依赖性

  JWT工具

  阐明:

  重新键盘简单软件包

  登录功能

  阐明:

  登录功能

  删除相应的密钥

  更新密码功能

  阐明:

  更新用户密码时,您需要重新加工新的令牌并将新令牌返回到前端,并且从前端续订了从前端保存的令牌,并且存储在redis中的令牌已更新。这不会太糟糕

  实际项目中的其他解释,用户被分为普通用户和管理员。只有管理员用户才具有删除用户的权限。此功能也涉及令牌操作,但我太懒了,演示项目不会编写它。

  在实际项目中,密码传输已加密

  拦截器

  注意:拦截器中有两件事。一个是检查令牌,另一个是确定是否需要更新令牌

  令牌验证:

  令牌自动续订:

  为了不经常操作REDIS,仅在过时的时间仅30分钟时才能更新到期时间。

  原始拦截器配置:httts://juejin.cn/post/7100856911897034760