CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解
CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解
tomcat版本: tomcat-8.0.29
jdk版本: jdk1.8.0_65
nginx版本: nginx-1.9.8
cas版本: cas4.1.2
cas-client-3.4.1
参考来源:
https://github.com/Jasig/java-cas-client
以下的示例采用我博客的另外两篇文章中搭建好的测试环境举例
CAS (1) —— Mac下配置CAS到Tomcat(服务端)
CAS (2) —— Mac下配置CAS到Tomcat(客户端)
CAS (3) —— Mac下配置CAS客户端经代理访问Tomcat CAS
Mac为nginx安装nginx-sticky-module
【高可用HA】Nginx (1) —— Mac下配置Nginx Http负载均衡(Load Balancer)之101实例
Nginx (2) —— Mac下配置Apache Httpd的Https/SSL (待出)
目标架构

此代理非彼代理
在CAS官方网站上给出了一个“Proxy Web Flow Diagram”:


顺序图:(来源于http://jasig.github.io/cas/4.0.x/protocol/CAS-Protocol.html)
这个方案主要适用一种场景:
有两个应用App1和App2,它们都是受Cas Server保护的,即请求它们时都需要通过Cas Server的认证。现需要在App1中通过Http请求访问App2,显然该请求将会被App2配置的Cas的AuthenticationFilter拦截并转向Cas Server,Cas Server将引导用户进行登录认证,这样我们也就不能真正的访问到App2了。针对这种应用场景,Cas也提供了对应的支持。通过Proxy访问其它Cas应用
无论是用中文关键字在“度娘”,还是用英文关键字再“谷哥”上搜索,多数文章都是描述上面这样一个场景。
而我这里介绍的“代理”,并非是上述场景——依靠代理去验证ticket,“代理”在此的角色是:
- 只做分发反向代理(未来的负载均衡器)
* 注意:所以说“此代理非彼代理”
准备
要搭建上面这个环境会相对复杂,我们需要参照之前的文章准备以下必备的组件或环境:
CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解
测试
访问“https://app1.hoau.com:8413/cas1”

会重定向到“https://proxy.sso.hoau.com/cas/login?service=https%3A%2F%2Fapp1.hoau.com%3A8413%2Fcas1”
然后输入用户明密码(test01/psw01)
如果验证成功,则会将浏览器重定向到app1的登陆成功页面。

再次访问“https://app1.hoau.com:8413/cas1”
可以直接进入登陆成功页,而无需输入用户名密码。
访问另一应用
同样可以通过test01用户直接进入登陆成功页,而无需输入用户名密码。

上面基本测试通过,我们接着分析网络顺序。
代理下的网络顺序分析
由于这个场景较为简单,所以jasig官网上并没有给出这个场景下的网络顺序图。于是我自己画了一个。

仔细观察可以发现:上图与不通过nginx代理时,官网的序列图类似,只有代理出多了转发和反向的工作。
首次访问
https://app1.hoau.com:8413/cas1
(0)用户通过浏览器访问上面地址

(1)浏览器访问Protected App #1
(2)Protected App #1尝试验证身份
首次登陆,身份验证未通过,返回重定向消息
302 Location
https://proxy.sso.hoau.com:443/cas/login
?service=https://app1.hoau.com:8413/cas1
(3)浏览器重定向以上地址至代理服务器Proxy
(4)Proxy将次请求分发至CAS服务器

https://sso.hoau.com:8433/cas/login
?service=https://app1.hoau.com:8413/cas1
CAS服务器发现用户没有SSO的Session,然后返回CAS的登陆页面内容
(5)返回CAS的登陆页面内容至代理服务器
(6)代理将响应的内容返回给浏览器
(7)浏览器为用户呈现登陆页面

(8)用户提交用户名和密码

(9)浏览器提交Form内容至代理
(10)代理转发提交的内容至CAS服务器
(11)CAS服务器验证用户身份
(12)CAS服务器返回相应至代理

(13)代理将响应返回给浏览器
并且设置Cookie
CASTGC
由于身份验证成功,此刻浏览器被要求重定向至Protected App #1的登陆页
(14)浏览器被重定向至Protected App #1
并且携带ticket信息。

*注意:以下(15)、(16)、(17)和(18)步为Protected App #1与CAS Server背后的交互。
Protected App #1 收到请求后,会再次访问CAS Server以验证ticket。
(15)(16)Protected App #1通过Proxy请求serviceValidate
(17)(18)CAS服务器经由代理返回响应信息
(19)如果CAS服务器校验通过
则会设置Cookie JSESSIONID,然后将重定向信息返回到浏览器
(20)浏览器再次访问Protected App #1

并携带有效的JSESSIONID,这时
(21)Protected App #1会校验Session Cookie
如果验证通过,则
(22)返回目标页面的内容

再次访问
https://app1.hoau.com:8413/cas1
另一个应用访问
https://app2.hoau.com:8423/cas2
以上“再次访问”和“另一应用访问”不在赘述,大家可以自行测试,或参考无代理情况下的序列图:
CAS (4) —— CAS浏览器SSO访问顺序图详解(CAS Web Flow Diagram by Example)
附一个Charles的http顺序图

结束
CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解的更多相关文章
- CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解
CAS (5) -- Nginx代理模式下浏览器访问CAS服务器配置详解 tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 nginx版本: nginx-1.9.8 ...
- nginx 代理模式下,获取客户端真实IP
最近做博友推荐,发现个小问题,用$_SERVER['REMOTE_ADDR'];得到的都是服务器的地址192.168.96.52,搜索了一下,发现问题,改为$_SERVER['HTTP_X_REAL_ ...
- (转)CAS (4) —— CAS浏览器SSO访问顺序图详解(CAS Web Flow Diagram by Example)
CAS (4) —— CAS浏览器SSO访问顺序图详解(CAS Web Flow Diagram by Example) tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0 ...
- CAS (4) —— CAS浏览器SSO访问顺序图详解(CAS Web Flow Diagram by Example)
CAS (4) -- CAS浏览器SSO访问顺序图详解(CAS Web Flow Diagram by Example) tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0 ...
- 如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式: 最大连接数 = worker_processes * worker_connections/4
如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式: 最大连接数 = worker_pro ...
- nginx高性能WEB服务器系列之四配置文件详解
nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...
- 【原创】K8S环境下研发如何本地调试?kt-connect使用详解
K8S环境下研发如何本地调试?kt-connect使用详解 背景 注:背景有点啰嗦,讲讲一路走来研发本地调试的变化,嫌烦的可以直接跳过,不影响阅读. 2019年 我在的公司当时是个什么情况,只有两个J ...
- 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...
- (转)Linux下select, poll和epoll IO模型的详解
Linux下select, poll和epoll IO模型的详解 原文:http://blog.csdn.net/tianmohust/article/details/6677985 一).Epoll ...
随机推荐
- nginx last 和break redirect 和 permanent
一.last & break (1)last 和 break 当出现在location 之外时,两者的作用是一致的没有任何差异. 注意一点就是,他们会跳过所有的在他们之后的rewrite 模块 ...
- 《TCP/IP详解卷1:协议》读书笔记
<TCP/IP详解卷1:协议>读书笔记 - QingLiXueShi - 博客园https://www.cnblogs.com/mengwang024/p/4425834.html < ...
- PyCharm黄色波浪线提示: Simplify chained comparison
译过来就是,可简化连锁比较: case 1 if a >= 0 and a <= 9: 1 可简化为: if 0 <= a <= 9: 1 就像我们的数学表达式一样.显然这种情 ...
- SQL Server 索引重建脚本
在数据的使用过程中,由于索引page碎片过多,带来一些不利的性能问题,我们有时候需要对数据库中的索引进行重组或者重建工作.通常这个阈值为30%,大于30%我们建议进行索引重建,小于则进行重组操作.以下 ...
- Mybatis mark 勿看
Mybatis底层原理总结(一) 2018年01月11日 11:51:06 阅读数:2668 本文适合对Mybatis有一定了解的. 1. Mybatis 读取XML配置文件后会将内容放在一个Conf ...
- 转 部署Zipkin分布式性能追踪日志系统的操作记录
2017年02月27日 11:01:29 https://blog.csdn.net/konglongaa/article/details/58016398 阅读数:7631 Zipkin是Twitt ...
- 有用的 Mongo命令行 db.currentOp() db.collection.find().explain() - 摘自网络
在Heyzap 和 Bugsnag 我已经使用MongoDB超过一年了,我发现它是一个非常强大的数据库.和其他的数据库一样,它有一些缺陷,但是这里有一些东西我希望有人可以早一点告诉我的. 即使建立索引 ...
- Atitit Seed-Filling种子填充算法attilax总结
Atitit Seed-Filling种子填充算法attilax总结 种子填充的原理,4联通与8联通区域的选择.. 三个队列 waitProcessPixList tempPixList Proces ...
- 台式机vim配置
set autoread syntax on "set number " filetype ident on "set autoindent "set expa ...
- shouldAutoRotate Method Not Called in iOS6
转自:http://stackoverflow.com/questions/13588325/shouldautorotate-method-not-called-in-ios6 参考1:http:/ ...