[sso] 单点登录认证流程
一、流程说明
第一步:访问cas过滤链接ssoLogin,拼凑定向到 CAS_SERVER 获取ticket的URL 第二步:CAS_SERVER校验用户信息,生成Ticket 第三步:重新定向到访问客户端的ssoLogin并附加Ticket参数和值 第四步:根据传来的Ticket拼凑定向到CAS_SERVER的连接去校验Ticket的合法性 第五步:CAS_SERVER校验成功后,会返回XML报文并重新定向到访问客户端的ssoLogin
解析该XML报文,构造用户信息对象存储在session中
然后根据ssoLogin设置的loginSuccessUrl跳转到登录成功后的访问页面
二、具体步骤
1、导入所需依赖jar包

2、在web.xml中配置需要单点登录过滤的路径为/ssoLogin
本地客户端URL:http://localhost:8080/webtest/ssoLogin 远程cas服务器地址CAS_LOGIN_URL:https://192.168.6.100/ptyhzx-sso/login
web.xml配置

ssoclient.properties配置

3、流程剖析
(1) 访问ssoLogin[处理类:SSOServlet]带上用户名和密码 - requestUrl
https://localhost:8080/webtest/ssoLogin?username=user1&password=123456
(2) 构造第一次访问CAS_SERVER的getTicketURL
getTicketURL = CAS_LOGIN_URL ? SERVICE参数
目的:获取TICKET
http://192.168.6.100/ptyhzx-sso/login?service=http%3A%2F%2Flocalhost%3A8080%2Fwebtest%2FssoLogin%3Frenew=true&other=form&accessToken=C45BD9AE005909FE2F9EC45D54FF70D2ADD106142B17461AEC94AD4A098A7420025D7694680916B5276CDDE8FA085C5A
说明: 后台根据 requestUrl 构造 service 参数 service的值 = 去掉用户名密码后的requestUrl参数 + renew参数 + other参数 + 用户名密码加密后的accessToken 拼接完毕后再对service整体编码作为最终的service值
构造获取getTicektURL完毕后立刻重定向到该URL去
(3) CAS_SERVER根据accessToken验证用户信息
验证成功
1、生成TOKEN【示例:ST-5649-Wv3HsI75tG7dNzEu9Uxg-cas01.example.org】
2、重定向到requestURL,此时requestURL中包含了ticket参数
http://localhost:8080/webtest/ssoLogin;jsessionid=DBFC81A7ECA2C24C90B2AB5440475E05&ticket=ST-5649-Wv3HsI75tG7dNzEu9Uxg-cas01.example.org
验证失败,跳转到配置的loginFailureURL并提示具体错误信息
(4) 根据得到的ticket调用验证方法:
Assertion vaildAssertion = ticketValidator.validate(ticket,requestURL);
调用validate方法会构造验证的 validURL 去CAS服务器验证这个TICKET是否合法
validateURL =
CAS_SERVER_URL/serviceValidate? + ticket参数 + serviceCode参数 + service参数
service参数是验证成功后重定向的URL地址
http://192.168.6.100/ptyhzx-sso/serviceValidate?ticket=ST-5653-dURt1ErNHUuEm9j3vsqe-cas01.example.org&serverCode=101&service=http%3A%2F%2Flocalhost%3A8080%2Fwebtest%2FssoLogin
String serverResponse = retrieveResponseFromServer(new URL(validationUrl), ticket);
(6)验证成功后cas_server会返回xml报文到重定向的URL地址
<!-- 成功时 -->
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
<cas:authenticationSuccess>
<cas:user>a1</cas:user>
<cas:attributes>
<cas:id>1100000000000000000</cas:id> <cas:sex>1</cas:sex> <cas:username></cas:username> <cas:authenticationMethod>com.jeaw.sso.adaptors.jdbc.QueryDatabaseAuthenticationHandler</cas:authenticationMethod> <cas:email></cas:email> <cas:nickname>a1</cas:nickname> <cas:status>1</cas:status> <cas:cellphone></cas:cellphone> <cas:usertype>03</cas:usertype> <cas:loginid>1000000001</cas:loginid> <cas:password>111111</cas:password> </cas:attributes>
</cas:authenticationSuccess>
</cas:serviceResponse> <!-- 失败时 -->
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
<cas:authenticationFailure code='INVALID_TICKET'>
未能够识别出目标 'ST-136-Tnw7BLEKurYGcDaZFgo6-cas01.example.org'票根
</cas:authenticationFailure>
</cas:serviceResponse>
(7) 后续操作
1、调用parseResponseFromServer(serverResponse)解析该报文以生成 Assertion 对象
vaildAssertion 2、构造用户信息对象存于session request.getSession().setAttribute("userInfo",vaildAssertion); 3、跳转到登陆成功页面 response.sendRedirect(loginSuccessUrl);
(8) 交互流程一览

(9)参考文档
基于CAS实现单点登录(SSO):登录成功后,cas client如何返回更多用户信息
[sso] 单点登录认证流程的更多相关文章
- SSO 单点登录简单流程(cas)
配置服务端(链接数据库) 第一步: 下载cas-server端,解压开, 将中的解压开,将该包中的内容放入cas文件夹(新建文件夹)中 然后将这个文件夹放入到服务端的服务器(tomcat)中 将解压开 ...
- CAS单点登录详细流程
一.CAS简介和整体流程 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目.CAS ...
- (十一) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)
上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的 ...
- Spring Cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)
上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的 ...
- NET Core 2.0使用Cookie认证实现SSO单点登录
NET Core 2.0使用Cookie认证实现SSO单点登录 之前写了一个使用ASP.NET MVC实现SSO登录的Demo,https://github.com/bidianqing/SSO.Sa ...
- CAS实现SSO单点登录原理
1. CAS 简介 1.1. What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...
- cas sso单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析
转:http://blog.csdn.net/ae6623/article/details/8848107 1)PPT流程图:ppt下载:http://pan.baidu.com/s/1o7KIlom ...
- CAS实现SSO单点登录原理(转)
1. CAS 简介 1.1. What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...
- Docker 创建 Bamboo6.7.1 以及与 Crowd3.3.2 实现 SSO 单点登录
目录 目录 1.介绍 1.1.什么是 Bamboo? 2.Bamboo 的官网在哪里? 3.如何下载安装? 4.对 Bamboo 进行配置 4.1.获取授权许可 4.2.一般配置 4.3.数据库配置 ...
随机推荐
- ruby学习总结02
1.条件判断(nil或alse为假,其他值均为真) 1.if语句 if/elsif/else/end 条件成立时执行相关操作 2.unless语句 unless/else/end 条件 ...
- 2.建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数,抛出NagativeFundsException,
public class Bank { Double qian=0.0; double newBank(double a) { qian=qian+a; return qian; } double w ...
- Android 网格布局 计算器
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&quo ...
- MySql使用show processlist查看正在执行的Sql语句
今天上班例行的查看了下服务器的运行状况,发现服务器特卡,是mysqld这个进程占用CPU到了99%导致的. 比较好奇是那个程序在使用mysql导致cpu这么高的,通过show processlist命 ...
- require或include相对路径多层嵌套引发的问题
require或include相对路径多层嵌套引发的问题 php中require/include 包含相对路径的解决办法 在PHP中require,include一个文件时,大都是用相对路径,是个 ...
- Python的getattr(),setattr(),delattr(),hasattr()
判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 >>> class ...
- CSS定位小技巧
CSS定位Static 默认定位Relative 相对定位:left 和topposition: relative;/*相对定位*/ left:40px;/*在原来的位置向右移动*/ top:100p ...
- HDU 1711 Number Sequence(数列)
HDU 1711 Number Sequence(数列) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- asp.netMVC4(基础知识----传值问题分析)
(1)一般在数据交互的时候,都会涉及到前后台间的相互传值,一般的情况下,方法也有多种,下面就后台定义变量往前台传值: 以下是后台代码: /// <summary> /// 展示举报信息 / ...
- openstack 排错
1.查看日志 grep ERROR /var/log/keystone/keystone.log 2. # nova list ERROR:n/a (http 404) 检查环境变量是否正确.