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

参考来源:

jasig.github.io:CAS protocol

https://github.com/Jasig/java-cas-client

通过Proxy访问其它Cas应用

CAS负载均衡配置——SSL篇

CAS负载均衡配置

CAS客户端集群

  • 以下的示例采用我博客的另外两篇文章中搭建好的测试环境举例

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服务器配置详解

测试

  1. 访问“https://app1.hoau.com:8413/cas1”

    会重定向到“https://proxy.sso.hoau.com/cas/login?service=https%3A%2F%2Fapp1.hoau.com%3A8413%2Fcas1”

  2. 然后输入用户明密码(test01/psw01)

    如果验证成功,则会将浏览器重定向到app1的登陆成功页面。

  3. 再次访问“https://app1.hoau.com:8413/cas1”

    可以直接进入登陆成功页,而无需输入用户名密码。

  4. 访问另一应用

    同样可以通过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服务器网络顺序图详解的更多相关文章

  1. CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解

    CAS (5) -- Nginx代理模式下浏览器访问CAS服务器配置详解 tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 nginx版本: nginx-1.9.8 ...

  2. nginx 代理模式下,获取客户端真实IP

    最近做博友推荐,发现个小问题,用$_SERVER['REMOTE_ADDR'];得到的都是服务器的地址192.168.96.52,搜索了一下,发现问题,改为$_SERVER['HTTP_X_REAL_ ...

  3. (转)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 ...

  4. 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 ...

  5. 如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式: 最大连接数 = worker_processes * worker_connections/4

    如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式: 最大连接数 = worker_pro ...

  6. nginx高性能WEB服务器系列之四配置文件详解

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  7. 【原创】K8S环境下研发如何本地调试?kt-connect使用详解

    K8S环境下研发如何本地调试?kt-connect使用详解 背景 注:背景有点啰嗦,讲讲一路走来研发本地调试的变化,嫌烦的可以直接跳过,不影响阅读. 2019年 我在的公司当时是个什么情况,只有两个J ...

  8. 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

    salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解   建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...

  9. (转)Linux下select, poll和epoll IO模型的详解

    Linux下select, poll和epoll IO模型的详解 原文:http://blog.csdn.net/tianmohust/article/details/6677985 一).Epoll ...

随机推荐

  1. shell将脚本输出结果记录到日志文件

    使用tee命令: sh portal/main.sh |tee log.txt 获取脚本父类路径cmddir="`dirname $0`"

  2. [转]Spring mvc interceptor配置拦截器,没有登录跳到登录页

    <?xml  version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.s ...

  3. C#日期格式转换大全

    有时候我们要对时间进行转换,达到不同的显示效果 默认格式为:2005-6-6 14:33:34 如果要换成成200506,06-2005,2005-6-6或更多的该怎么办呢 我们要用到:DateTim ...

  4. Eclipse maven问题汇总

    在使用eclipse+maven的过程中,遇到一系列问题,先汇总记录如下: 1. 在java工程中,缺少Maven依赖: 这个问题比较棘手,一般都对eclispe的工程结构不是很了解,后来经过长时间的 ...

  5. mysql性能测试(索引)

    首先,使用Talend随机生成一千万条数据: 数据库表中现在有1千万+的数据: mysql> select count(*) from zhangchao; +----------+ | cou ...

  6. python源码安装

    # mkdir /apps/Python- 解压源码包,进入源码包 [root@LB_81 Python-]# ls aclocal.m4 configure.ac install-sh Makefi ...

  7. crontab -e 新法

    SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root 0 3 * * * /home/rsync.sh //每天晚上3点执行一次同步 ...

  8. nodejs中的框架介绍

    Sequelize 关系型数据库对象模型映射框架 mongoose 非关系型数据库文档模型映射框架

  9. Azure产品目录

    计算 Linux 虚拟机:为 Ubuntu.Red Hat 等预配虚拟机 Windows 虚拟机 为 SQL Server.SharePoint 等预配虚拟机 应用服务 快速创建适用于 Web 和移动 ...

  10. [Windows Azure] Using the Graph API to Query Windows Azure AD

    Using the Graph API to Query Windows Azure AD 4 out of 4 rated this helpful - Rate this topic This d ...