一、流程说明

第一步:访问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. Queue 应用——拓扑排序

    1. 拓扑排序 题目描述:对一个有向无环图(Directed Acyclic Graph, DAG)G进行拓扑排序,是将G中所有顶点排成线性序列,是的图中任意一堆顶点u和v,若边(u, v)在E(G) ...

  2. Creating HTML table with vertically oriented text as table header 表头文字方向

    AS an old question, this is more like info or reminder about vertical margin or padding in % that ta ...

  3. Python中时间的处理之——timedelta篇

      #! /usr/bin/python # coding=utf-8 from datetime import datetime,timedelta """ timed ...

  4. Using SSH on Linux

    This document covers the SSH client on the Linux Operating System and other OSes that use OpenSSH. W ...

  5. python_way day16 JQuary

    python_way day16 JQuery 封装dom js代码 jQuery(1.10,1.12-兼容性好,2.0.以后放弃了ie9以下) - 封装了Dom & JavaScript 查 ...

  6. php 连接mysql的问题

    当前我的情况是安装上mysql配置了my.cnf中的socket,并且在指定位置也生成了 mysql.sock 的sock文件,此时我通过php.ini来设置php连接mysql.sock的文件,但是 ...

  7. STL--list

    List-概述: 列表List是一个线性链表结构(Double—Linked Lists,双链表),它的数据由若干个节点构成,每一个节点都包括一个信息块Info(即实际存储的数据).一个前驱指针Pre ...

  8. 大学生学习编程(PHP)

    在v2ex上看到一大三的求职实习,然后有人给出了建议,个人觉得也挺好,做个记录./  原帖地址 @ARjson问: 大三的学生党,求实习岗位,现居北京.后端PHP一年半开发经验,熟悉speedphp, ...

  9. iOS - UITableViewController

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UITableView : UIScrollView <NSCoding> @available(iOS ...

  10. poj1981Circle and Points(单位圆覆盖最多的点)

    链接 O(n^3)的做法: 枚举任意两点为弦的圆,然后再枚举其它点是否在圆内. 用到了两个函数 atan2反正切函数,据说可以很好的避免一些特殊情况 #include <iostream> ...