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. 第2章 Python基础-字符编码&数据类型 购物车&多级菜单 作业

    作业 一.三级菜单 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, ...

  2. 大家来找茬:富连网今天中午抢购二手iPhone时网站无法访问的问题

    前几天在新闻区看到富士康卖二手iPhone的新闻,今天又看到说今天中午12点开抢.一大早就发现富连网无法访问了.前几天刚看到新闻的时候注册了个账号进去看了看,发现页面加载速度非常慢,今天中午基本无法打 ...

  3. 在ubuntu14系统中将redis-server设置为开机启动项

    1.redis安装完成后(我装的是redis-3.0.7),修改配置文件redis.conf,修改的项目如下 注意:以下内容都是在root用户下进行操作的 gedit redis.conf打开文件进行 ...

  4. BigBao 的python开发到DevOps 之路

    本人是打杂的,从想学Python到自学Python,最后到报班培训Python路程总共用时两年,目前在培训Python.因为我这个大脑不适合自学.脑袋笨,自制力差,所以没办法只有乖乖交钱学python ...

  5. shell 计算时间差

    #!/bin/bash #date_5='awk 'BEGIN{print strftime("%H:%M",(systime()-300))}'' #ps -ef | grep ...

  6. Shiro(一):shiro架构和组件介绍

    简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份认证.授权.加密和会话管理.使用Shiro的易于理解的API,可以快速.轻松地获得任何应用程序,从最小的移动应用程序到最大的网 ...

  7. ios. GCD 倒计时时间

    //倒计时时间 __block int timeout = 60; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_ ...

  8. Java compiler level does not match the version of the installed Java project 问题解决

    右键项目“Properties”,在弹出的“Properties”窗口左侧,单击“Project Facets”,打开“Project Facets”页面. 在页面中的“Java”下拉列表中,选择相应 ...

  9. Ubuntu java install & config

    im:http://jingyan.baidu.com/article/08b6a591cb06f114a8092209.html http://www.cnblogs.com/zknublx/p/5 ...

  10. javascript读取xml文件读取节点数据的例子

    分享下用javascript读取xml文件读取节点数据方法. 读取的节点数据,还有一种情况是读取节点属性数据. <head> <title></title> < ...