程序员一代码搬运工
【Java学习心得和Java学习技术个人总结】

单点登录sso原理及代码实现

什么是单点登录

一个账户在多个系统上实现单一用户的登录

为什么用单点登录

引用一个很经典的案例

单点登录的原理

单点登录sso原理及代码实现

图片好像有点小,以下是过程

  1. 用户访问系统1的受保护资源,系统1发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数
  2. sso认证中心发现用户未登录,将用户引导至登录页面
  3. 用户输入用户名密码提交登录申请
  4. sso认证中心校验用户信息,创建用户与sso认证中心之间的会话,称为全局会话,同时创建授权令牌
  5. sso认证中心带着令牌跳转会最初的请求地址(系统1)
  6. 系统1拿到令牌,去sso认证中心校验令牌是否有效
  7. sso认证中心校验令牌,返回有效,注册系统1
  8. 系统1使用该令牌创建与用户的会话,称为局部会话,返回受保护资源
  9. 用户访问系统2的受保护资源
  10. 系统2发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数
  11. sso认证中心发现用户已登录,跳转回系统2的地址,并附上令牌
  12. 系统2拿到令牌,去sso认证中心校验令牌是否有效
  13. sso认证中心校验令牌,返回有效,注册系统2
  14. 系统2使用该令牌创建与用户的局部会话,返回受保护资源

用户登录成功之后,会与sso认证中心及各个子系统建立会话,用户与sso认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话,局部会话建立之后,用户访问子系统受保护资源将不再通过sso认证中心,全局会话与局部会话有如下约束关系

  1. 局部会话存在,全局会话一定存在
  2. 全局会话存在,局部会话不一定存在
  3. 全局会话销毁,局部会话必须销毁
单点登录sso原理及代码实现

单点登录实现过程

sso-client

  1. 拦截子系统未登录用户请求,跳转至sso认证中心
  2. 接收并存储sso认证中心发送的令牌
  3. 与sso-server通信,校验令牌的有效性
  4. 建立局部会话
  5. 拦截用户注销请求,向sso认证中心发送注销请求
  6. 接收sso认证中心发出的注销请求,销毁局部会话

sso-server

  1. 验证用户的登录信息
  2. 创建全局会话
  3. 创建授权令牌
  4. 与sso-client通信发送令牌
  5. 校验sso-client令牌有效性
  6. 系统注册
  7. 接收sso-client注销请求,注销所有会话

数据库就就简单一个用户验证表

单点登录sso原理及代码实现

搭建认证中心

服务端主要代码

单点登录sso原理及代码实现

判断下登录名字是否正确,然后把用户信息写入到redis里

客户端主要代码

单点登录sso原理及代码实现

主要是判断是否登录过,没有就跳转到控制中心去登录

单点登录sso原理及代码实现

跳转的时候带上登录后的跳转链接

单点登录sso原理及代码实现

登录成功后

单点登录sso原理及代码实现

cookies 存在了

判断登录状态是否过期

单点登录sso原理及代码实现

这个就完成了 cookies+redis 单点登录的流程了

未经允许不得转载:程序员一代码搬运工 » 单点登录sso原理及代码实现

分享到:更多 ()