单点登录SSO的实现原理

单系统登录机制

浏览器第一个请求服务器,服务器会创建一个会话,并将会话的ID作为响应的一部分发送给浏览器,浏览器存储会话ID,并在后续的请求中带上会话ID,服务器取得请求中的会话ID就知道是不是同一个用户了。
浏览器存储会话ID的两种方式

  1. 参数
    将会话ID作为每一个请求的参数,服务器接收请求并解析会话ID,就可以判断是否来自同一个会话,此方式不可靠。
  2. cookie
    浏览器维护会话ID,每次发送http请求是浏览器会自动发送会话ID,cookie机制正好用来做这件事。cookie是浏览器用来存储少量数据的一种机制,数据以key/value形式存储,浏览器发送http请求是自动附带cookie信息。
    tomcat会话机制也实现了cookie,访问tomcat服务器时,浏览器中可以看到一个名为JSESSIONID的cookie,这就是tomcat会话机制中维护的会话ID。

登录状态
浏览器第一次请求时需要用户输入用户名,密码等身份信息。服务器接收到身份信息之后进行校验,校验成功之后,将会话状态 更新为已登录或已注册状态,并返回受保护的资源。
每次请求受保护资源时都会检查会话对象中的登录状态,只有通过验证的会话才能访问,登录机制因此而实现。

复杂系统机制

web系统早已从久远的单系统发展成为如今由多系统组成的应用群,面对如此众多的系统,用户难道要一个一个登录,一个一个注销?
web系统由单系统发展成多系统组成的应用群,复杂性应该由系统内部承担,而不是用户。无论web系统内部多么复杂,对用户而言,都是一个统一的整体,也就是说,用户访问web系统的整个应用群与访问单个系统一样,登录/注销只要一次就够了。

单新系统登录的限制

虽然单系统的登录解决方案很完美,但对于多系统应用群已经不再适用了,为什么呢?
单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器与服务器之间维护会话状态。但cookie是有限制的,这个限制就是cookie的域(通常对应网站的域名),浏览器发送http请求时会自动携带与该域匹配的cookie,而不是所有cookie。
既然这样,为什么不将web应用群中所有子系统的域名统一在一个顶级域名下,例如“*.baidu.com”,然后将它们的cookie域设置为“baidu.com”,这种做法理论上是可以的,甚至早期很多多系统登录就采用这种同域名共享cookie的方式。
然而,可行并不代表好,共享cookie的方式存在众多局限。首先,应用群域名得统一;其次,应用群各系统使用的技术(至少是web服务器)要相同,不然cookie的key值(tomcat为JSESSIONID)不同,无法维持会话,共享cookie的方式是无法实现跨语言技术平台登录的,比如java、php、.net系统之间;第三,cookie本身不安全。
因此,我们需要一种全新的登录方式来实现多系统应用群的登录,这就是单点登录

单点登录

什么是单点登录?单点登录全称Single Sign On(以下简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分

登录

相比单系统登录,sso需要一个独立的认证中心,只有认证中心可以接受用户的用户名,密码等身份信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码无误后,创建授权令牌,在接下来的跳转过程中 ,授权令牌作为参数发送给各个子系统。子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式于但系统登录方式相同。

大致流程

  1. 用户访问子系统1的受保护资源,系统1发现用户未授权,跳转至sso认证中心,并将自己的地址作为参数。
  2. sso认证中心发现用户为通过授权,将用户引导至登录页面,进行授权。
  3. sso校验用户信息,创建用户于sso认证中心之间的会话,称为全局会话,同时创建令牌,sso认证中心携带令牌跳转至最初的请求地址(1中的参数,系统1)
  4. 系统1拿到令牌后,去sso认证中心校验令牌是否有效
  5. sso认证中心校验令牌。返回有效,注册系统1
  6. 系统1使用该令牌创建用户的会话,称为局部会话,返回受保护的资源。

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

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

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

注销

单点登录自然也要单点注销,在一个子系统中注销,所有子系统的会话都将被销毁

大致流程

  1. 用户向系统1发起注销请求
  2. 系统1根据用户与系统1建立的会话ID拿到令牌,向sso认证中心发起注销请求
  3. sso认证中心校验令牌有效,销毁全局会话,同时取出所有用此令牌注册的子系统地址
  4. sso认证中心向所有注册的子系统发起注销请求
  5. 各个注册的子系统接收sso人中中心的注销请求,销毁局部会话
  6. sso认证中心引导用户至登录页面

单点登录SSO的实现原理相关推荐

  1. 单点登录SSO的原理和实现

    背景 SSO,英文全称Single Sign On,单点登录,一般应用于多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的保护资源.如登录访问 blog.baidu.com 后,对于 ...

  2. jwt单点登录_单点登录SSO技术选型

    一些人存在的意义总归是让另一些人成长,然后消失. --刘同<谁的青春不迷茫> 1.单点登录是什么? 单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即可访问这 ...

  3. OAuth2 实现单点登录 SSO

    转载自  OAuth2 实现单点登录 SSO 1. 前言 技术这东西吧,看别人写的好像很简单似的,到自己去写的时候就各种问题,"一看就会,一做就错".网上关于实现SSO的文章一大堆 ...

  4. 统一用户认证和单点登录和授权的原理与流程

    统一用户认证和单点登录和授权的原理与流程 1 前言 2 介绍 2.1 统一用户认证 2.2 单点登录 2.3 授权 3 原理 3.1 统一用户认证原理 3.2 单点登录原理 3.3 OAuth授权原理 ...

  5. CAS解决单点登录SSO

    关于CAS很多的原理和基础的配置启动,网上是很多的,我更多是结合我的实践和心得.需要了解CAS的原理,认证协议,认证流程,可以参考以下文章. 让CAS支持客户端自定义登陆页面--客户端篇 CAS原理与 ...

  6. php同子域单点登录,SSO 单点登录总结(PHP)(示例代码)

    本篇文章根据个人理解的知识整理汇总,如有不足之处,请大家多多指正. 单点登录(SSO--Single Sign On)的应用是很普遍的,尤其在大型网站系统中,比如百度,登录百度账号和,再转到百度经验. ...

  7. OAuth2实现单点登录SSO

    本文转载自:https://www.cnblogs.com/cjsblog/p/10548022.html OAuth2实现单点登录SSO 1.  前言 技术这东西吧,看别人写的好像很简单似的,到自己 ...

  8. 单点登录SSO:图示和讲解

    目录 概述 示例运行效果动画 跨域Web SSO时序图 代码截图 几个基本概念 涉及的站点和页面 重点理解:单点登录的核心步骤 敢说最准确的单点登录图示,因为: 我严格对照所画时序图的每个步骤,开发了 ...

  9. 企业门户应用整合中单点登录(SSO)的技术实现与应用

    企业门户应用整合中单点登录(SSO)的技术实现与应用 相关专题: 电子应用 时间:2009-07-27 09:56来源: icbuy亿芯网 1 引 言 企业在信息化建设过程中,由于经常采用逐步信息化的 ...

最新文章

  1. h5做的app和原生app的区别
  2. Python学习教程(Python学习路线):Python3之递归函数简单示例
  3. 项目分析(map复习)
  4. 系统架构设计师证书含金量_计算机专科生不能错过的两个证书,含金量比较高,出社会有益...
  5. Hyperledger Fabric学习笔记(二)- Fabric 2.2.1环境搭建
  6. 简单明了学习SQL CTE递归查询
  7. python 直线虚线_python – matplotlib中的虚线而不是缺失值
  8. try-expect在集合处理中的应用
  9. 内存带宽与显示分辨率带宽的关系与计算
  10. DSP复习笔记(2)——TMS320F28335芯片内部结构
  11. java 月份缩写_英文月份简写
  12. 除了方文山,用TA你也能帮周杰伦写歌词了
  13. Chrome 添加【微信 / QQ】内置浏览器(解决 “请在微信客户端打开链接” 提示)
  14. 费德勒球拍_球拍编程指南(DrRacket)
  15. qq邮箱发送邮件到163邮箱
  16. 目标检测入门知识以思考(写于2021.11)
  17. 春季高考计算机专业知识归纳,春季高考计算机试题总结.doc
  18. Checkout和Rest的所有谜题(git reset --files是要改一下)
  19. 程序员为什么成就感很高
  20. 第18章异步编程-bloc-自定义状态管理示例-BlocProvider

热门文章

  1. fedora 19 安装后优化
  2. 雨林木风操作系统有感
  3. STM32进阶之串口环形缓冲区实现
  4. 基于SpringBoot的微信订餐业务(第一章框架搭建和基本查询)
  5. 工业4.0激发中国制造业ICT深度应用
  6. 基于JAVA翻转课堂微视频管理系统计算机毕业设计源码+系统+lw文档+部署
  7. aardio PDF与图片互相转换 PDFRender库
  8. 浅谈网站访问速度优化
  9. LAF让Swing漂亮起来02 - Nimbus LAF(进阶篇)
  10. Fast Neural Style在win10上运行