[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.数据库配置 ...
随机推荐
- 在Window Embedded CE(Wince)下使用OpenNETCF进行路由表的开发
点击打开链接 背景 在开发3G项目的是时候,发现尽管3G网络连接已经建立成功了,但是数据不能发送成功,查明原因,由于路由表的问题,导致数据往ActiveSync连接的对端,也就是PC发送,而不是发送到 ...
- __declspec关键字详细用法
__declspec关键字详细用法 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和C++语言的ANSI ...
- 搭建本地的git仓库
折腾了快一天了,终于搭建成功了. 分享一下搭建的步骤: 一.GIT仓库的创建 1. adduser git 2. passwd git 此例设置git的密码为123456 3. cd /home/gi ...
- Hearthstone-Deck-Tracker项目的编译
https://github.com/HearthSim/Hearthstone-Deck-Tracker https://github.com/HearthSim/HearthDb https:// ...
- [Gym]2008-2009 ACM-ICPC, NEERC, Moscow Subregional Contest
比赛链接:http://codeforces.com/gym/100861 A模拟,注意两个特殊的缩写. #include <bits/stdc++.h> using namespace ...
- mysql以ROOT权限提权方法
今天feng问了一个问题,mysql root权限运行,直接root服务器吧,SSH登录 正好上网查一下相关的资料: mysql .x里面引入了一个system函数,这个函数可以执行系统命令,当mys ...
- poj 2653 (线段相交判断)
http://poj.org/problem?id=2653 Pick-up sticks Time Limit: 3000MS Memory Limit: 65536K Total Submis ...
- Object-C中的排序和Compare陷阱
来源:http://m.blog.csdn.net/blog/u011883764/38868097 Date : 2015-12-24 一.Compare陷阱 NSString有多个compare相 ...
- Flex打印功能FlexPrintJob调用
收藏下很详细的学习资料 http://wenku.baidu.com/view/b3d4f40702020740be1e9bf8.html import mx.printing.FlexPrintJo ...
- ubuntu12.04 gdb安装使用
参考文档:http://blog.csdn.net/haoel/article/details/2879 http://www.programlife.net/gdb-manual.html [新手笔 ...