若依密码产生和验证过程:%E8%8B%A5%E4%BE%9D%E5%AF%86%E7%A0%81%E4%BA%A7%E7%94%9F%E5%92%8C%E9%AA%8C%E8%AF%81%E8%BF%87%E7%A8%8B/
jwt相关知识:https://blog.csdn.net/weixin_45070175/article/details/118559272
概览
A,注册用户时对password加密(不可逆),保存在数据库;
B,用户使用name和password登录,使用相同的参数对password加密后,和数据库的比较,不相同则密码错误;
C,后台生成token返回给前台,前台保存token在登录人的电脑中;
D,登录人调用后台接口,前端开发人员把本地的token放到请求头中;请求先走到网关,网关获取token并验签解析token,成功则说明认证成功,允许你继续访问后台资源了;
一、密码校验
1,注册用户,加密明文密码
加密的入参(加密算法、盐、随机数)都是使用的默认的;
2,用户登录,校验密码
将明文密码使用和步骤1中相同的加密方式和加密入参进行加密,并和数据库保存的加密密码比较;
二、生成token
1,用户登录,创建token
2,创建token的大体流程
3,生成UUID作为token
4,后台使用redis缓存token,过期时间半天
5,将token、userId、用户名称打包成jwt,返回给前台
三、校验token
1,前台如何传递token
前台需要和后台商量好传递token的方式,比如若依这个项目,前端把token放在请求头里传递给我后台,请求头的key为Authorization,value在前面还拼上了Bearer ;
2,后台校验token
所有的前台请求都会先走到网关(gate-way),这样token的认证校验就统一交给网关处理,校验通过后再分发给对应的服务;
3,解析token(jwt)
像我们平常瞎写token,基本是无法验签的;因为jwt应该包含了signature字段,后台使用证书解签的时候得到的signature和传来的signature肯定是不一样的;
四、其他
后台给了前台token,前台拿着这个token就可以访问后台,并且可以识别是谁在访问,通过曲线救国的方式让无状态的http请求变成了有状态的;
token可以在多个服务间共享,省的每个服务都要去连数据库查询用户名密码是否正确;