CAS (3) —— Mac下配置CAS客户端经代理访问Tomcat 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

参考来源:

CAS实现单点登录(SSO)经典完整教程

CAS 4.0 配置开发手册

cas客户端应用实现

使用 CAS 在 Tomcat 中实现单点登录

Tomcat (1) —— Mac下配置Tomcat Https/SSL

【高可用HA】Apache (2) —— Mac下安装多个Apache Tomcat实例

【高可用HA】Nginx (1) —— Mac下配置Nginx Http负载均衡(Load Balancer)之101实例

Mac为nginx安装nginx-sticky-module

CAS (1) —— Mac下配置CAS到Tomcat(服务端)

CAS (2) —— Mac下配置CAS到Tomcat(客户端)

目标架构

准备

要搭建上面这个环境会相对复杂,我们需要参照之前的文章准备以下必备的组件或环境:

  1. 2个Tomcat服务器作为客户端应用程序服务器(即cas的客户端)

     app1.hoau.com:8081/8413(http/https)
    app2.hoau.com:8082/8423(http/https)

    参照Tomcat ClusterTomcat SSLCAS Client

  2. 1个Nginx服务器作为中间层代理转发服务器(后可扩展为LoadBalancer)

     proxy.sso.hoau.com:85/?(http/https)

    参照Nginx Load BalancerNginx Sticky Session

  3. 另一个1个带有SSL的Tomcat服务器作为CAS服务器

     sso.hoau.com:8083/8433(http/https)

    参照Tomcat SSLCAS Server

配置

我们在之前的文章中已经实现了通过app1和app2客户端直连CAS服务器,从而实现SSO的目的:

CAS (1) —— Mac下配置CAS到Tomcat(服务端)

CAS (2) —— Mac下配置CAS到Tomcat(客户端)

基于以上的配置web.xml,我们首先需要将两个app的SSO服务器指向nginx proxy(http://proxy.sso.hoau.com:85/cas/login),其中:

  • APP1: app1.hoau.com:8081/8413(http/https)

    • CAS Authentication Filter

        <init-param>
      <param-name>casServerLoginUrl</param-name>
      <!--
      <param-value>https://sso.hoau.com:8433/cas/login</param-value>
      -->
      <param-value>http://proxy.sso.hoau.com:85/cas/login</param-value>
      </init-param>
      <init-param>
      <param-name>serverName</param-name>
      <param-value>https://app1.hoau.com:8413</param-value>
      </init-param>
    • CAS Validation Filter

        <init-param>
      <param-name>casServerUrlPrefix</param-name>
      <!--
      <param-value>https://sso.hoau.com:8433/cas</param-value>
      -->
      <param-value>http://proxy.sso.hoau.com:85/cas</param-value>
      </init-param>
      <init-param>
      <param-name>serverName</param-name>
      <param-value>https://app1.hoau.com:8413</param-value>
      </init-param>
  • APP2: app2.hoau.com:8082/8423(http/https)

    同上

  • Nginx Proxy: proxy.sso.hoau.com:85/?(http/https)

    修改nginx.conf:

      upstream localhost {
    #根据ip计算将请求分配各那个后端tomcat,许多人误认为可以解决session问题,其实并不能。
    #同一机器在多网情况下,路由切换,ip可能不同
    #ip_hash;
    sticky; #Richard: http
    #server localhost:8083;
    #server localhost:8084; #Richard: https todo
    server sso.hoau.com:8433;
    #server sso.hoau.com:8443;
    }

    并开放https Proxy_ByPass

      location / {
    proxy_connect_timeout 3;
    proxy_send_timeout 30;
    proxy_read_timeout 30;
    #proxy_pass http://localhost;
    proxy_pass https://localhost;
    }
* 注意: 在CAS目标服务器为单节点时,sticky参数客户忽略,默认为ip_hash。

测试

我们清空浏览器的cache和cookie,按照下列步骤操作

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

    系统会将我们重定向到

     "http://proxy.sso.hoau.com:85/cas/login"。
  2. 输入用户名密码"test01/psw01"

    登陆成功

  3. 访问"https://app2.hoau.com:8423/cas2"

    系统会将我们重定向到

     "http://proxy.sso.hoau.com:85/cas/login"。

    但是系统不会用"test01/psw01"自动登陆。

* 按照以上步骤,交换app1与app2的操作顺序,发现结果一样,app1与app2均可以自行通过nginx proxy到CAS Server上登陆,但是看似无法共享Ticket

*扩展

问题来了

  • 为什么不通过代理直连的时候,SSO正常,但是通过代理就不正常了呢?

怀疑点

  • Nginx proxy 没有SSL?
  • CAS服务器上的Ticket失效了?
  • Client App(Tomcat)--> Proxy(Nginx) --> CAS Server(Tomcat)这条线上什么东西丢了?

请参考另一篇文章

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

结束

CAS (3) —— Mac下配置CAS客户端经代理访问Tomcat CAS的更多相关文章

  1. CAS (7) —— Mac下配置CAS 4.x的JPATicketRegistry(服务端)

    CAS (7) -- Mac下配置CAS 4.x集群及JPATicketRegistry(服务端) tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 cas版本: ...

  2. CAS (2) —— Mac下配置CAS到Tomcat(客户端)

    CAS (2) -- Mac下配置CAS到Tomcat(客户端) tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 cas版本: cas4.1.2 cas-clie ...

  3. CAS (1) —— Mac下配置CAS到Tomcat(服务端)

    CAS (1) -- Mac下配置CAS到Tomcat(服务端) tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 cas版本: cas4.1.2 cas-clie ...

  4. CAS (8) —— Mac下配置CAS到JBoss EAP 6.4(6.x)的Standalone模式(服务端)

    CAS (8) -- Mac下配置CAS到JBoss EAP 6.4(6.x)的Standalone模式(服务端) jboss版本: jboss-eap-6.4-CVE-2015-7501 jdk版本 ...

  5. CAS (1) —— Mac下配置CAS到Tomcat(服务端)(转)

    tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 cas版本: cas4.1.2cas-client-3.4.1 参考来源: CAS实现单点登录(SSO)经典完整教 ...

  6. Mac下配置多个SSH KEY访问远程Git服务

    第一步 生成对应的ssh key 1 后面输入你的用户名 或者 邮箱 2 输入一个独立的ssh key名字 区别之前的名字 第二步  编辑 config文件 在.ssh/目录下面 在config文件配 ...

  7. Mac下配置Apache Httpd的Https/SSL

    Mac下配置Apache Httpd的Https/SSL httpd版本: httpd-2.4.17 jdk版本: jdk1.8.0_65 参考来源: Mac下安装Apache Httpd Mac O ...

  8. Tomcat (1) —— Mac下配置Tomcat Https/SSL

    Tomcat (1) -- Mac下配置Tomcat Https/SSL tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 参考来源: SSL/TLS Config ...

  9. mac下配置开发环境

    常用命令 显示隐藏文件 1 defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder 关闭隐藏文 ...

随机推荐

  1. Pandas中DataFrame修改列名

    Pandas中DataFrame修改列名:使用 rename df = pd.read_csv('I:/Papers/consumer/codeandpaper/TmallData/result01- ...

  2. lsnrctl: error while loading shared libraries: /opt/app/oracle/product/11.2/db_1/lib/libclntsh.so.11

    错误描述: 安装好数据库后,在oralce用户下敲入 查看监听状态命令,返回错误提示 [oracle@centos3 ~]$ lsnrctl statuslsnrctl: error while lo ...

  3. js 对象操作 对象原型操作 把一个对象A赋值给另一个对象B 并且对象B 修改 不会影响 A对象

    我最近在做一个vue + element-UI + vue-resource + vuex项目的时候,遇到了一个对象的问题. 当我们在项目需要 复制一个对象到另一个对象并且  被复制的对象不能受复制后 ...

  4. python学习笔记011——内置函数__sizeof__()

    1 描述 __sizeof__() : 打印系统分配空间的大小 2 示例 def fun(): pass print(fun.__sizeof__()) 运行 112

  5. Linux页面回收概述

    本文主要介绍了一些page reclaim机制中的基本概念.这份文档其实也可以看成阅读ULK第17章第一小节的一个读书笔记.虽然ULK已经读了很多遍,不过每一遍还是觉得有收获.Linux内核虽然不断在 ...

  6. activity 概念认知

    工作流生命周期,5步 定义,工作流生命周期从流程定义开始. 发布,由开发人员打包各种资源,然后在系统管理中发布流程定义.包含流程定义文件.自定义表单.任务监听等. 执行,有具体的流程引擎如 activ ...

  7. spring boot实战读书笔记1

    1 覆盖起步依赖引入的传递依赖. 以Spring Boot的Web起步依赖为例,它传递依赖了Jackson JSON库.如果不想使用,可以使用 <exclusions>元素去除Jackso ...

  8. NodeJS操作Redis实现消息的发布与订阅

    首先先说一下流程: 1.保存数据到Redis,然后将member值publish到 chat频道(publish.js功能) 2.readRedis.js文件此前一直在监听chat频道,readRed ...

  9. Java:几个正则式应用(检查汉字、日期、EMAIL、手机号码的合法性,替换字符串等)

    1. 检查输入是否为合法汉字 /** * 判断输入字符是否为有效汉字 * @param str 字符 * @return 是否合法汉字 */ public static boolean isValid ...

  10. TCP协议具体解释(上)

     TCP协议具体解释 3.1 TCP服务的特点 TCP协议相对于UDP协议的特点是面向连接.字节流和可靠传输. 使用TCP协议通信的两方必须先建立链接.然后才干開始数据的读写.两方都必须为该链接分 ...