SSO实现机制
引言
单点登录有许多开发商提供解决方案,本文以yale大学SSO开源项目CAS为例,介绍单点登录实现机制。
术语解释
SSO-Single Sign On,单点登录
TGT-Ticket Granting Ticket,用户身份认证凭证票据
ST-Service Ticket,服务许可凭证票据
TGC-Ticket Granting Cookie,存放用户身份认证凭证票据的cookie
SSO原理概述
SSO组件主要包含:SSO服务器、SSO客户端。SSO服务器主要负责完成用户认证、提供单点登录服务;SSO客户端部署在应用系统(Web应用端与C/S架构模式应用端),用户请求访问应用系统的受保护资源时,需要将请求转向SSO服务器进行身份认证、单点登录服务相关处理。
SSO服务器接口
uri | 说明 |
/login |
凭证请求器,参数如下: service:客户端要访问的应用的标识; renew:如果设置这个参数,sso将被绕过;不支持renew和gateway同时存在,若存在则忽略gateway; gateway:如果设置这个参数,CAS将不再问客户端要凭证。 凭证接收器,参数如下: service:客户端要访问的应用的标识;CAS在认证成功后将它的url转发给客户端; warn:在认证转发给其他服务前,客户端必须给予提示。 |
/logout | 单点退出,释放cas单点登录的session |
/proxyValidate | SSO服务器验证票据的合法性 |
SSO单点登录主要原理
SSO单点登录访问流程主要有以下步骤:
1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。
2. 定向认证:SSO客户端会重定向用户请求到SSO服务器。
3. 用户认证:用户身份认证。
4. 发放票据:SSO服务器会产生一个随机的Service Ticket。
5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。
6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。
7. 单点退出:用户退出单点登录。
SSO单点登录访问总共会涉及以上6个步骤,但用户不同的SSO访问可能只会涉及到几个步骤,我们把SSO访问流程我们分为5种实例情况介绍:登录点首次访问、登录点二次访问、单点首次访问、单点二次访问、单点退出。这5种实例应当可以比较全面地展示SSO访问实现的机制。
注:文中存在以下术语词汇,解释如下。
登录点:首次进入子系统登录的站点在本文中称为登录点。
单点:用户已经登录,而后再访问另一子系统的站点在本文中称为单点。
登录点首次访问:是指首次访问应用系统,进入登录页面的过程。登录点二次访问:是指在上述”登录点“,再次进行正常的访问”登录点“的过程。
单点首次访问:是指已经在上述“登录点”登录后,再首次访问另一个子系统进行访问的过程。单点二次访问:是指已经在上述“单点首次访问",再次进行正常的访问”单点“的过程。
登录点首次访问
说明:用户首次访问”登录点“System1,session中没有用户上下文,于是将请求地址包装为service参数,转向SSO服务器”定向认证“,SSO服务器返回登录页面,用户录入用户名、密码等凭证信息,提交给SSO服务器,SSO服务器进行认证,认证成功后,生成TGT,再根据TGT发放票据ST,返回响应给浏览器,浏览器带着票据ST的service参数的请求,请求SSO服务器验证票据,验证票据成功后,返回给浏览器用户信息(通过cas协议约定的xml格式传递数据解析转换成需要的用户信息),设置session用户上下文、cookie中设置TGC。
登录点二次访问
说明:用户在上述“登录点首次访问”登录成功后,再次访问登录点的应用服务时,判断session中已经存在用户上下文,就不再拦截,直接转向到需要访问的目标服务资源。
单点首次访问
说明:同上述“登录点首次访问”的说明。
单点二次访问
与“登录点二次访问”相似。
单点退出
说明:用户单点登录后,有一个全局的过滤器SingleSignOutFilter对访问的安全资源的ticket,sessionid记录到一个映射表,我们暂称其为票据会话映射表。在一个子系统(如system1)执行单点退出"/logout"时,先销毁system1的本地session,再向SSO服务器发送单点退出请求,SSO服务器接到这个请求后,将用户认证票据TGT销毁,清除浏览器cookie中的TGC,再读取票据会话映射表,将其对应的票据ST,session全部销毁。这样用户再访问时各子系统时,是单点退出状态,就需要重新登录。
我们再详细从CAS源码中看看SSO单点退出实现机制。
SSO客户端涉及源码类图如下:
一般web应用中一般部署在web.xml文件中,单点退出相关配置如下:
<listener> <listener-class> edu.yale.its.tp.cas.client.session.SingleSignOutHttpSessionListener </listener-class> </listener> <filter> <filter-name>SingleSignOutFilter</filter-name> <filter-class> edu.yale.its.tp.cas.client.session.SingleSignOutFilter </filter-class> </filter> <filter> <filter-name>CasLogoutProxy</filter-name> <filter-class> edu.yale.its.tp.cas.exclient.SimpleServerLogoutHandler </filter-class> <init-param> <param-name>logoutUrl</param-name> <!--CAS Server Logout URL--> <param-value> http://localhost:8080/ssoserver/logout </param-value> </init-param> <init-param> <!--CAS Client Application URL--> <param-name>serviceUrl</param-name> <param-value> http://localhost:8070/ssoclient/index.jsp </param-value> </init-param> </filter> ... <filter-mapping> <filter-name>CasLogoutProxy</filter-name> <url-pattern>/logout</url-pattern> </filter-mapping> <filter-mapping> <filter-name>SingleSignOutFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
说明:我们看到单点退出的相关类结构,web.xml配置了单点退出的相关类(1个监听器SingleSignOutHttpSessionListener,2个过滤器SingleSignOutFilter,SimpleServerLogoutHandler)。实现利用了session存储机制,SessionStoreManager是个单例类,用于管理session的存储、删除;SessionMappingStorage是session的存储、删除的执行者,可以看到实际存储的结构是一个artifactId、sessionId为名值对的HashMap表;监听器SingleSignOutHttpSessionListener的作用是session销毁时,调用session管理单例类SessionStoreManager进行session的删除销毁;SingleSignOutFilter的作用有2个:一个是在单点访问拦截安全资源时调用单例类SessionStoreManager存储session,另一个是在单点退出时调用单例类SessionStoreManager删除session;SimpleServerLogoutHandler的作用是将客户端的退出请求转发到SSO服务器端,集中处理做各个子系统的单点退出。
SSO服务器端单点退出涉及源码类图如下:
说明:用户发送单点退出请求,转向到SSO服务器的单点退出服务接口/logout,SSO服务器将每次web请求构造一个继承类AbstractWebApplicationService的SimpleWebApplicationServiceImpl的实例,单点退出执行logOutOfService方法,销毁票据、session等处理。
SSO实现机制的更多相关文章
- 新浪微博SSO登陆机制
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 新浪微博SSO登陆机制(转载)
原文地址: http://www.cnblogs.com/AloneSword/p/3840548.html 最近在使用sina微博时,经常性交替使用 weibo.com 和 t.sina.cm.cn ...
- 教务处sso设计缺陷
前言 刚学习python,觉得比较枯燥总不知道从哪里入手,偶然一次,同学让我帮忙看看选课,发给我的是学校统一的默认格式的密码,突然就想试试有多少人还是默认密码,从QQ群里找了一份学生信息尝试了一下,发 ...
- 统一门户与业务系统的sso整合技术方案(单点登录)
一.单点登录(SSO,Single Sign On)整合目前计划接入统一门户的所有业务系统均为基于JavaEE技术的B/S架构系统.由于统一门户的单点登录技术选用的是JA-SIG组织开发的Cas Se ...
- 关于Flask-Login中session失效时间的处理
最近需要使用Python开发web系统,主要用到的框架就是Flask,前端使用Jinja2模板引擎和Bootstrap,web容器使用Cherrypy,其中关于Login管理的使用了Flask-Log ...
- VSS(Virtual Switching System)
一.虚拟交换系统(VSS) VSS是一种网络虚拟化技术,讲两台Catalyst 6500系列交换机组合为单一虚拟交换机,从而提高运营效率.增强不间断通信,并将系统带宽容量扩展到1.4Tbps.在初始阶 ...
- JForum 源码分析
怎么才算好的源码分析呢?当然我这个肯定不算.我想大概分为几个层面吧,写写注释那算最基本的了,写写要点思路和难点,算是还不错拉,再难的就是跳出源码举一反三,形成自己的一套思路吧.好好努力吧. 这次针对的 ...
- Flask-Login详解
Flask-Login详解 关于Flask登录认证的详细过程请参见拙作<<使用Flask实现用户登陆认证的详细过程>>一文,而本文则偏重于详细介绍Flask-Login的原理, ...
- 单点登录实现机制:桌面sso
参考链接,感谢作者:https://zm10.sm-tc.cn/?src=l4uLj8XQ0IiIiNGckZ2TkJiM0ZyQktCZlo2Mi5uNmp6S0I/QysrJyszPztGXi5K ...
随机推荐
- [1-2] Dependence-Aware Service Function Chain Design and Mapping
文献名称:Dependence-Aware Service Function Chain Design and Mapping 文献类型(期刊.硕论.博论):会议:Globecom 发表年份:2017 ...
- [技术博客] 数据库1+N查询问题
目录 问题简述 问题解决 group的方法简化查询 改正后的代码 作者:庄廓然 问题简述 本次开发过程中我们用到了rails的orm框架,使用orm框架可以很方便地进行对象的关联和查询,例如查询一个用 ...
- yum -y install pip No package pip available. Error: Nothing to do
centos下安装pip时失败: [root@wfm ~]# yum -y install pipLoaded plugins: fastestmirror, refresh-packagekit, ...
- SELECT DISTINCT ON expressions must match initial ORDER BY expressions
开发说pg中执行sql报错,发来消息让帮看看: SELECT DISTINCT ON expressions must match initial ORDER BY expressions 详细语句如 ...
- Python3基础 import...as 给导入的模块起别名
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- (转)2019年 React 新手学习指南 – 从 React 学习线路图说开去
原文:https://www.html.cn/archives/10111 注:本文根据 React 开发者学习线路图(2018) 结构编写了很多新手如何学习 React 的建议.2019 年有标题党 ...
- continue & tag in GO
Go语言中 continue 语句可以结束当前循环,开始下一次的循环迭代过程,仅限在 for 循环内使用,在 continue 语句后添加标签时,表示开始标签对应的循环,例如: package mai ...
- shell中的shift左移参数命令
shift命令用于对参数的向左移动,通常用于在不知道传入参数个数的情况下依次遍历每个参数,然后进行相应的处理(常见与Linux中各种程序的启动脚本).在扫描处理脚本程序的参数时,经常要用到shift命 ...
- oracle plsql 自定义异常
set serveroutput on DECLARE ; pename emp.ename%type; --自定义异常 no_emp_found exception; begin open cemp ...
- EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案-Onvif(二)使用Onvif协议进行设备RTSP地址获取
背景介绍 EasyNVR最大的优势就是兼容性,通过RTSP协议接入传统网络摄像机.NVR.编码器等,使用RTSP协议接入能兼容市面上绝大多数网络摄像机等源设备,最大程度的提高整体方案的硬件设备的兼容性 ...