2.JWT实现单点登录的概念

1.总结:
  1. 昨天主要是了解了JWT的作用、构成以及RSA的作用和构成,再就是分布式认证的流程和集中式的差别
  2. JWT的作用:JWT用于生成和校验token
  3. JWT的构成:头部、载荷以及签名
  • 头部:设置规范信息,如签名的编码格式
  • 载荷:存储有效信息,如用户名,用户角色,过期时间,但是不能存储密码,容易泄密
  • 签名:将头部和载荷通过base64编码,再通过"."相连,加入盐值,再使用头部声明的编码格式进行编码,头部跟载荷一般容易查到,系统的安全性体现在盐上面
  1. RSA加密:私钥,公钥
  • 私钥一般保存在认证服务中,公钥保存在资源服务中
  • 当使用私钥加密时,需要私钥或者公钥解密,当公钥加密,只能使用私钥解密
  • 加密过程是在认证中进行的,系统返回给用户的凭证就是加密后的token,解密是在用户第二次登录的过程中,认证中心验证token的时候进行解密
  1. 认证流程
  • 集中式:1)用户认证:首先时在UsernamePasswordAuthenticationFilter中的attemptAuthentication中进行用户认证,该过滤器父类SuccessfulAuthentication中进行认证成功后的操作;2)身份校验:在AuthenticationFilter的Internal方法中检查用户是否登陆,session中是否有用户信息
  • 分布式:1)用户认证:可接受异步认证post请求,在successfulAuthentication认证后将token返回给用户;2)身份校验:使用BasicAuthenticationFilter的doFilterInternal方法来验证用户携带的token是否合法,并解析用户信息
 
2.反思:昨天在思想上面没有什么提升,在知识上面,主要就是对单点登录的认识,之前的单点登录并没有涉及到加密这个内容,这样更好地保护了token吗,也就是用户的信息,今天会编写相关代码
 
3.复盘:主要还是从之前的单点登录出发
  1. sso-login 包下的LoginController
//doLogin 1.首先获取用户登录网页,用于后面登录成功的重定向
2.模拟数据库获取数据验证用户登录信息
3.登陆成功后,创建token,将其作为建,用户信息作为值存储在缓存类汇总
4.创建cookie,使用固定字符串作为键,token作为值存储在cookie汇总, 再响应cookie到浏览器,最后重定向回原登录页面
5.登录失败,通过session返回错误信息,返回登录页面

//getUserInfo
1.使用了ResponseEntity类来响应前端, 首先是通过判断token是否存在,如果存在,从缓存类中根据token获取与用户信息, 再返回OK状态,不存在返回HttpStatus.BAD_REQUEST

//logOUt
1.设置cookie时间为0
2.清楚缓存类中的token
3.响应清除后的cookie给浏览器

 

  1. sso-login 包下的ViewController
//toLogin 
1.首先是判断target是否存在,存在就判断cookie是否存在,
再根据cookie获取token, 判断token是否存在,
再根据token获取用户信息,如果用户信息存在,重定向回源登录页面
2.如果不存在target,赋值为登录页面

 

  1. 其他 包下的ViewController
//toIndex 
1.首先判断cookie是否存在,若存在根据cookie的值获取token;
再根据token是否存在,若存在,则根据用户登录网址加上token获取用户信息,并通过 session响应给登录页面

 

 
posted @ 2022-09-13 10:30  求知律己  阅读(70)  评论(0编辑  收藏  举报