什么是单点登录

单点登录(Single Sign On),简称SSO,定义是在多个应用系统中,用户只需登录一次就可以访问所有相互信任的应用系统。
SSO一般都需要一个独立的统一认证中心,子系统登录的时候均需要跳转到统一认证中心,当一个系统登录成功后,再访问其他子系统时会自动登录。
比如淘宝和天猫,用户登录淘宝后,再打开天猫会自动登录了天猫,这种就属于单点登录。

流程

  • 用户访问系统的受保护资源,系统A发现用户未登录,跳转至统一认证中心,并将自己的地址作为参数
  • 统一认证中心发现用户未登录,将用户引导至登录页面
  • 用户输入登录信息提交登录申请
  • 统一认证中心校验用户登录信息,创建用户与统一认证中心之间的会话,称为全局会话,同时创建授权令牌
  • 统一认证中心带着令牌跳转回最初的请求地址(系统A)
  • 系统拿到令牌,去统一认证中心校验令牌是否有效
  • 统一认证中心校验令牌,返回有效,注册系统A
  • 系统A使用该令牌创建与用户的会话,称为局部会话,返回受保护资源
  • 用户访问系统B的受保护资源
  • 系统B发现用户未登录,跳转至统一认证中心,并将自己的地址作为参数
  • 统一认证中心发现用户已登录,跳转回系统B的地址,并附上令牌
  • 系统B拿到令牌,去统一认证中心校验令牌是否有效
  • 统一认证中心校验令牌,返回有效,注册系统B
  • 系统B使用该令牌创建与用户的局部会话,返回受保护资源

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

全局会话与局部会话有如下约束关系

  • 局部会话存在,全局会话一定存在
  • 全局会话存在,局部会话不一定存在
  • 全局会话销毁,局部会话必须销毁

如何实现

  1. 部署一个统一认证中心,用于专门处理登录请求的独立的 Web 服务
  2. 用户统一在统一认证中心进行登录,登录成功后,统一认证中心记录用户的登录状态,并将 token 写入 Cookie(这里的Cookie 是统一认证中心的,应用系统是访问不到的)
  3. 应用系统检查当前请求有没有 Token,如果没有,说明用户在当前系统中尚未登录,就将页面跳转至统一认证中心进行登录
  4. 如果统一认证中心发现用户尚未登录,则返回登录页面,等待用户登录
  5. 如果发现用户已经登录过了,直接跳转回目标 URL ,并在跳转前生成一个 Token,拼接在目标 URL 的后面,回传给目标应用系统
  6. 应用系统拿到 Token 之后,需要向统一认证中心确认下 Token 的合法性,防止用户伪造。确认无误后,应用系统记录用户的登录状态,并将 Token 写入 Cookie(这个 Cookie 是当前应用系统的),然后给本次访问放行。
  7. 用户再次访问当前应用系统时,就会自动带上这个 Token,应用系统验证 Token 发现用户已登录,这里就不涉及统一认证中心了

什么是单点登录,如何实现单点登录相关推荐

  1. java php 单点登陆,cas实现单点登录,登出(java跟php客户端)(转)

    cas实现单点登录,登出(java跟php客户端)(转)cas实现单点登录,登出(java和php客户端) (转) 最近项目中需要做单点登录,客户端包含java和php,java有几个应用程序,php ...

  2. javaweb实现单点登录,防止重复登录,获取sessionid,对session及时销毁回收,只允许一个用户登录,结合struts2实现

    首先我们目的是实现一个单点登录,即只允许单个账户单个登录. 实现异地与同地登录判断 要将先登录的用户强制下线.不免用到session. 单点登录的最大难题:已经登录且重复登录的用户的session怎么 ...

  3. shiro单点登录原理_SSO单点登录三种情况的实现方式详解

    单点登录(SSO--Single Sign On)对于我们来说已经不陌生了.对于大型系统来说使用单点登录可以减少用户很多的麻烦.就拿百度来说吧,百度下面有很多的子系统--百度经验.百度知道.百度文库等 ...

  4. php tipask yii 单点登录_php实现单点登录实例

    这是一个简单版的php单点登录概述,如果需要实现复杂的需自己,编写复杂的ticket加解密算法. 先看张图. sso系统,http://sso.yxh.com <?phpecho "s ...

  5. SSO单点登录之同域登录的实现

    单点登录解决的问题 在同一个公司开发的两个子项目时,如果就是简单的登录,我们通常就是在一个项目的pc端中进行登录,然后在另一个子项目pc端中又要进行登录,也就是说传统的登录方式是相互独立的:而这样会出 ...

  6. 谷粒商城笔记+踩坑(17)——【认证模块】登录,用户名密码登录+微博社交登录+SpringSession+xxl-sso单点登录

    导航: 谷粒商城笔记+踩坑汇总篇 目录 5. 用户名密码登录 5.1[认证模块]登录业务 5.1.1 模型类,接收用户名密码 5.1.2 feign客户端新增登录功能 5.1.3 LoginContr ...

  7. 手撸SSO单点登录(五)登录验证-OA系统页面刷新或者跳转新OA系统页面

    目标  上一章节手撸SSO单点登录(四)登录验证-首次登录已经成功登陆并且跳转至OA系统,当OA系统刷新,或者OA系统打开其他菜单是怎么实现无需登陆,直接验证通过,跳转页面或者刷新页面. 视频详细讲解 ...

  8. open edx 实现第三方登录-shibboleth单点登录

    open edx 实现第三方登录-shibboleth单点登录 在open edx端的配置参考官方文档:http://edx.readthedocs.io/projects/edx-installin ...

  9. Yale CAS单点(不强制)登录问题

    在单点登录时,如果A应用已登录,访问B应用时. Yale CAS的单点登录机制是: 用户访问单点登录客户端时,如果session.getAttribute("edu.yale.its.tp. ...

  10. 单点登录系统【All登录系统优化】

    文章目录 单点登陆系统简介 单点登陆系统概述 单点登陆系统解决方案设计 单点登陆系统初步设计 服务设计 服务流程 项目结构设计 sso-system基础服务工程实现 业务描述 数据库表结构设计 一.p ...

最新文章

  1. Promise 解析
  2. 量子物理 詹班 计算机,6量子物理作业答案
  3. 【运营】“顶级运营”最强速成攻略!目前国内不超过200人!
  4. [云炬python3玩转机器学习] 5-6最好的衡量线性回归法的指标: R Squared
  5. matlab 规范,matlab-代码-规范
  6. 深入理解java虚拟机--线程安全与锁优化
  7. 计组之数据运算:13、加法器优化
  8. 使用proguard混淆java web项目代码
  9. 战神级CTO直招产品技术小鲜肉,“悦家”团队带你玩转家装O2O
  10. 发票打印JAVA是什么_如何使用蓝牙热敏打印机打印发票收据
  11. fcq java_Java设计模式百例 - 解释器模式
  12. 光固化3D打印 一
  13. MUI框架的基本使用
  14. js表单提交 php,提交表单:js中form表单是如何提交的
  15. C语言两个文本相似度的算法,两个文本相似度算法实现和对比
  16. ylinux系统找到软件_你的 linux 上都有什么值得推荐的软件?
  17. 狐妖小红娘服务器维护,3月7游戏更新公告 狐妖小红娘版本上线
  18. chrome浏览器抓包工具介绍(2022,12,27)
  19. 不知明镜里,何处得秋霜
  20. MySQL系列:innodb源码分析之表空间管理

热门文章

  1. 代理记账公司的业务有哪些方面?
  2. 我做为一名测试工程师,职业发展方向是什么?
  3. java与javaScript 语法的区别
  4. 接受窗口消息如何知道是谁发的_领导给你发信息,应该这样回
  5. 个人博客迁移到托管平台Netlify
  6. Android Drawable - Scale Drawable使用详解(附图)
  7. Python中 redis StrictRedis对象操作string类型
  8. 斑纹长虫(回合游戏)
  9. java操控easyexcel读取excel表格数据为null或部分字段为null
  10. 学历对一个程序员来说重要吗?