一、流程说明

第一步:访问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)参考文档

单点登录SSO的实现原理

CAS实现SSO单点登录原理

类 Cas20ServiceTicketValidator

基于CAS实现单点登录(SSO):登录成功后,cas client如何返回更多用户信息

[sso] 单点登录认证流程的更多相关文章

  1. SSO 单点登录简单流程(cas)

    配置服务端(链接数据库) 第一步: 下载cas-server端,解压开, 将中的解压开,将该包中的内容放入cas文件夹(新建文件夹)中 然后将这个文件夹放入到服务端的服务器(tomcat)中 将解压开 ...

  2. CAS单点登录详细流程

    一.CAS简介和整体流程 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目.CAS ...

  3. (十一) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)

    上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的 ...

  4. Spring Cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)

    上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的 ...

  5. NET Core 2.0使用Cookie认证实现SSO单点登录

    NET Core 2.0使用Cookie认证实现SSO单点登录 之前写了一个使用ASP.NET MVC实现SSO登录的Demo,https://github.com/bidianqing/SSO.Sa ...

  6. CAS实现SSO单点登录原理

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...

  7. cas sso单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析

    转:http://blog.csdn.net/ae6623/article/details/8848107 1)PPT流程图:ppt下载:http://pan.baidu.com/s/1o7KIlom ...

  8. CAS实现SSO单点登录原理(转)

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...

  9. Docker 创建 Bamboo6.7.1 以及与 Crowd3.3.2 实现 SSO 单点登录

    目录 目录 1.介绍 1.1.什么是 Bamboo? 2.Bamboo 的官网在哪里? 3.如何下载安装? 4.对 Bamboo 进行配置 4.1.获取授权许可 4.2.一般配置 4.3.数据库配置 ...

随机推荐

  1. 在Window Embedded CE(Wince)下使用OpenNETCF进行路由表的开发

    点击打开链接 背景 在开发3G项目的是时候,发现尽管3G网络连接已经建立成功了,但是数据不能发送成功,查明原因,由于路由表的问题,导致数据往ActiveSync连接的对端,也就是PC发送,而不是发送到 ...

  2. __declspec关键字详细用法

    __declspec关键字详细用法 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和C++语言的ANSI ...

  3. 搭建本地的git仓库

    折腾了快一天了,终于搭建成功了. 分享一下搭建的步骤: 一.GIT仓库的创建 1. adduser git 2. passwd git 此例设置git的密码为123456 3. cd /home/gi ...

  4. Hearthstone-Deck-Tracker项目的编译

    https://github.com/HearthSim/Hearthstone-Deck-Tracker https://github.com/HearthSim/HearthDb https:// ...

  5. [Gym]2008-2009 ACM-ICPC, NEERC, Moscow Subregional Contest

    比赛链接:http://codeforces.com/gym/100861 A模拟,注意两个特殊的缩写. #include <bits/stdc++.h> using namespace ...

  6. mysql以ROOT权限提权方法

    今天feng问了一个问题,mysql root权限运行,直接root服务器吧,SSH登录 正好上网查一下相关的资料: mysql .x里面引入了一个system函数,这个函数可以执行系统命令,当mys ...

  7. poj 2653 (线段相交判断)

    http://poj.org/problem?id=2653 Pick-up sticks Time Limit: 3000MS   Memory Limit: 65536K Total Submis ...

  8. Object-C中的排序和Compare陷阱

    来源:http://m.blog.csdn.net/blog/u011883764/38868097 Date : 2015-12-24 一.Compare陷阱 NSString有多个compare相 ...

  9. Flex打印功能FlexPrintJob调用

    收藏下很详细的学习资料 http://wenku.baidu.com/view/b3d4f40702020740be1e9bf8.html import mx.printing.FlexPrintJo ...

  10. ubuntu12.04 gdb安装使用

    参考文档:http://blog.csdn.net/haoel/article/details/2879 http://www.programlife.net/gdb-manual.html [新手笔 ...