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