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

单点登录sso原理及代码实现什么是单点登录一个账户在多个系统上实现单一用户的登录为什么用单点登录单点登录可以做到在不记录用户密码的情况下 实现不同系统之间的资源共享 自动登录不安全 单点登录 一处登录 处处都可用 不用做多余的登录操作引用一个很经典的案例比如现在有 OA 系统 门户系统 人力资源管理系统 档案管理系统 生产管理系统 xx 系统等 这么多个系统在一个公司里面 如果一个用户需要使用这么多个系统

什么是单点登录

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

为什么用单点登录

单点登录可以做到在不记录用户密码的情况下,实现不同系统之间的资源共享,自动登录不安全,单点登录,一处登录,处处都可用,不用做多余的登录操作

引用一个很经典的案例

比如现在有OA系统、门户系统、人力资源管理系统、档案管理系统、生产管理系统、xx系统等,这么多个系统在一个公司里面,如果一个用户需要使用这么多个系统,那每天都要登录N多系统,太浪费时间了(其他还有统一用户、统一权限的问题,这里先不谈这个)所以单点登录就是,如果用户在门户系统登录了,那么他打开OA系统、生产管理系统的时候就不用再登录了,因为他已经在门户系统登录过一次

单点登录的原理

单点登录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 单点登录的流程了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223139.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午2:46
下一篇 2026年3月17日 下午2:46


相关推荐

  • 两款实用的DDos攻击工具[通俗易懂]

    两款实用的DDos攻击工具[通俗易懂]两款实用的DDos攻击工具2018-02-22Network•Security865之前为了重现某个bug,需要对网络设备进行ddos攻击测试,同时也是对设备的网络攻击防护功能进行抗压测试。临阵磨枪,google了两款攻击工具,windows平台的hyenae,以及Linux平台的hping3,在此记录一下两者的用法。Hyenaehyenae是在Windows平台上非常好用的一…

    2022年7月27日
    39
  • linux的crontab定时配置全过程

    linux的crontab定时配置全过程今天因为业务需求 需要在服务器上配置定时任务 所以使用到了 linux 的 crontab 特此记录 分享一下自己的过程

    2026年3月18日
    2
  • SpringBoot AOP学习(二):Spring AOP实现日志功能

    SpringBoot AOP学习(二):Spring AOP实现日志功能SpringAOP实现日志功能代码示例

    2022年8月11日
    7
  • display属性详解

    display属性详解根据 CSS 规范的规定 每一个网页元素都有一个 display 属性 用于确定该元素的类型 每一个元素都有默认的 display 属性值 比如 div 元素 它的默认 display 属性值为 block 称为块元素 而 span 元素的默认 display 属性值为 inline 称为 行内 元素 块元素与行元素是可以转换的 也就是说 display 的属性值可以由我们来改变 display 常用属性值 1 none 隐藏对象 2 inline 指定对象为行内元素 3 block 指定对象为块元素 4 inline bl

    2026年3月20日
    2
  • socket通讯原理及例程(一看就懂)

    socket通讯原理及例程(一看就懂)对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:什么是TCP/IP、UDP?Socket在哪里呢?Socket是什么呢?你会使用它们吗?什么是TCP/IP、UDP?TCP/IP(TransmissionControlProtocol/InternetProtocol)即传输控制协议/网间协议…

    2022年7月14日
    16
  • encodeURIComponent() 函数

    encodeURIComponent() 函数

    2021年10月9日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号