CAS是YALE大学发起的一个开源项目,旨在为web应用系统提供一种可靠的单点登录方法。它主要分为client和server端,server端负责对用户的认证工作,client端负责处理对客户端受保护的资源的访问请求,CAS的原理如下图所示:

上述的6个步骤解释如下:

1.用户通过browser请求cas client A端的资源。

2.client A端发现用户未登录(client没有收到ST),redirect到cas server,并且把用户请求服务的url发送给server;server发现用户浏览器中没有TGC(Ticket Granting Cookie),就跳转到登录页面。

3.用户在登录页面登录并登录成功。

4.server在用户的浏览器中设置一个TGC(Ticket Granting Cookie),并且在server端保存一个TGT(Ticket Granting Tciket),然后把用户重定向到{client A网址+ST(Service Ticket)},其中ST是由TGT生成的。

5.client A端通过GET的方法收到ST,向server端验证这个ticket的有效性,这一步主要是为了防止恶意用{client网址+杜撰的ST}来访问client A,所以虽然ST是server发送给client A的,client A仍然需要向server验证其有效性。

6.ticket有效,server端返回ticket对应的用户的用户名,client A端为用户提供请求的服务。

上述是未登录的用户访问client A的过程,用户通过以上步骤已经登录了CAS系统,此时他访问CAS系统中信任的client B端,是不用登录的,实现步骤如下:
1.1.用户通过browser请求cas client B端的资源。

2.client B端发现没有收到ST,redirect到cas server,并且把用户请求服务的url发送给server;server发现用户浏览器中有TGC(Ticket Granting Cookie),验证该TGC后,用server端存储的TGT生成一个ST。

3.server把用户重定向到{client B网址+ST(Service Ticket)}。

4.client B端通过GET的方法收到ST,向server端验证这个ticket的有效性.

5.ticket有效,server端返回ticket对应的用户的用户名,client B端为用户提供请求的服务,这样用户就不用再次登录就可以访问到client B了。

所以从上述过程中,可以看到client端既不能接触到用户的用户名密码,也不能接触到用户的凭证TGT或者TGC,它只做两件事情:如果用户的请求里有ST,那么就向服务器验证ST的有效性;如果用户的请求里没有ST,那么就把用户重定向到cas server;

cas server全权负责管理用户的用户名和密码,如果发现用户的浏览器里面有有效的TGC,就生成ST把用户重定向到client端;如果用户浏览器里面没有TGC或者TGC无效,就让用户重新登录,然后在用户的浏览器里面设置新的TGC。而server和用户浏览器之间的交互是https安全协议,这样就保证了用户的用户名密码的安全性。

本文记录server端的搭建过程。

1.安装JDK

2.搭建TOMCAT:

3.配置tomcat使用https协议

(1)生成安全证书

cd到%JAVA_HOME%/bin/目录下,执行一下命令

    Keytool -genkey -alias tomcat_key -keyalg RSA -storepass changeit -keystore server.keystore -validity 3600

    其中"server.keystore"是保存生成证书的路径和名称。

在接下来的操作中,要注意的是“您的名字和姓氏是什么?”这里要回答域名,比如我是在本机搭建tomcat,所以回答localhost,如下图所示:

其他的随便填就好了。此时会在%Tomcat_home%下生成server.keystore文件。

注:参数-validity指证书的有效期(天),缺省有效期很短,只有90天。

(2)将证书导入的JDK的证书信任库中

这步对于Tomcat的SSL配置不是必须,但对于CAS SSO是必须的,否则会出现如下错误:

Edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidate.

导入过程分2步,第一步是导出证书,第二步是导入到证书信任库,命令如下:

Keytool -export -trustcacerts -alias tomcat_key -file server.cer -keystore server.keystore -storepass changeit

Keytool -import -trustcacerts -alias  tomcat_key -file server.cer -keystore C:/”Program Files”/Java/jdk1.7.0_01/jre/lib/security/cacerts -storepass changeit

如果有提示,输入Y就可以了。

其它有用keytool命令(列出信任证书库中所有已有证书,删除库中某个证书):

keytool -list -keystore %JAVA_HOME%/jre/lib/security/cacerts >t.txt

keytool -delete -trustcacerts -alias tomcat_key -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit

(3)配置Tomcat

在Tomcat的server.xml配置文件中加入:

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"

port="8443" minSpareThreads="5" maxSpareThreads="75"

enableLookups="true" disableUploadTimeout="true"

acceptCount="100"  maxThreads="200"

scheme="https" secure="true" SSLEnabled="true"

clientAuth="false" sslProtocol="TLS"

keystoreFile="C:/Program Files/Apache Software Foundation/Tomcat 7.0/server.keystore"

truststoreFile="C:/Program Files/Java/jdk1.7.0_01/jre/lib/security/cacerts"

keystorePass="changeit"/>

4.部署CAS Server到Tomcat

本文使用的CAS Server版本是3.5.2,下载地址:https://www.apereo.org/cas/download

部署CAS Server的步骤如下:

1. 到CAS网站下载CAS Server。

2. 解压压缩文件,在解压后的文件夹内找到/modules/ cas-server-webapp-3.5.2.war,将cas-server-webapp-3.5.2.war复制到%Tomcat_Home%\webapps下并改名为cas.war.

3. 启动Tomcat,测试https://localhost:8443/cas/login看是否访问正常。

如果出现一下界面则说明CAS Server配置成功:

4. 修改配置文件deployerConfigContext.xml。(可选)//这里是使用数据库中的username和password作为中央主证服务器(cas)的认证用户,如果不设置,当访问cas时,只要用户名和密码一致即可通过认证。CAS Server默认登陆验证方式是SimpleTestUsernamePasswordAuthenticationHandler,也就是用户名和密码一致都可以登陆;但我们通常需要从数据库中取出用户名和密码进行验证,所以我们需要修改deployerConfigContext.xml,配置我们自己的服务认证方式:

(1)下载mysql-connector-java-5.1.22-bin.jar包。到cas-server-3.5.2\modules\目录下找到cas-server-support-jdbc-3.5.2.jar。

把上述两个包拷贝到apache-tomcat-7.0.56\webapps\cas\WEB-INF\lib\目录下。

(2)配置apache-tomcat-7.0.56\webapps\cas\WEB-INF\目录下的deployerConfigContext.xml文件:

前提,创建一个库,再创建一张表,表字段有username和password

首先增加一个datasource,通过增加一下的代码实现:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/cas"/>
<property name="username" value="root"/>
<property name="password" value="root"/> </bean>

然后改变认证方式,定位到如下代码:

<bean                     
class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />

把它注释掉,换成:

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="dataSource" />
<property name="sql" value="select password from app_user where userName=?" />
</bean>

其中<property name="sql" value="select password from app_user where userName=?" /> 中app_user是我存放用户名和密码的表,需要根据实际情况而定。

注意这里datasource放在注释掉的那行代码所在的</list>外面,大概相对位置见下面的代码,否则会报错:

                <!--bean
class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /-->
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="dataSource" />
<property name="sql" value="select password from app_user where userName=?" />
</bean>
</list>
</property>
</bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/cas"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>

(3)重启tomcat,再次到登录页面https://localhost:8443/cas/login上,就可以用数据库中的用户名和密码登录了,比如这里数据库中有的"test01","psw01"登录:

springboot+shiro+cas实现单点登录之cas server搭建的更多相关文章

  1. [精华][推荐]CAS SSO 单点登录框架学习 环境搭建

    1.了解单点登录  SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...

  2. CAS实现单点登录SSO执行原理及部署

    一.不落俗套的开始 1.背景介绍 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS框架:CAS(Centra ...

  3. 如何利用tomcat和cas实现单点登录(1):配置tomcat的ssl和部署cas

    如何利用tomcat和cas实现单点登录,借鉴了网上的很多教程,主要分为以下几个步骤: 一:下载好cas,tomcat之后,首先配置tomcat: 用鼠标右键点击"计算机"→选择& ...

  4. 单点登录系统CAS筹建及取得更多用户信息的实现

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. java单点登录系统CAS的简单使用

    转:http://blog.csdn.net/yunye114105/article/details/7997041 背景 有几个相对独立的java的web应用系统, 各自有自己的登陆验证功能,用户在 ...

  6. CAS实现单点登录流程

    CAS实现单点登录 环境 客户端: www.app1.com CAS服务器: www.cas-server.com 1.浏览器:发起请求 www.app1.com 2. 客户端:Authenticat ...

  7. CAS SSO单点登录框架学习

    1.了解单点登录  SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...

  8. [精华][推荐]CAS SSO单点登录服务端客户端实例

    1.修改server.xml文件,如下: 注意: 这里使用的是https的认证方式,需要将这个配置放开,并做如下修改: <Connector port="8443" prot ...

  9. CAS的单点登录和oauth2的最大区别

    CAS的单点登录时保障客户端的用户资源的安全 oauth2则是保障服务端的用户资源的安全 CAS客户端要获取的最终信息是,这个用户到底有没有权限访问我(CAS客户端)的资源. oauth2获取的最终信 ...

随机推荐

  1. 数据结构与算法(3)----->队列和栈

    1. 栈和队列的基本性质 栈是先进后出;(像是子弹夹,后进先打出) 队列是先进先出;(像是平时排队买冰淇淋,按顺序轮流) 栈和队列在实现的结构上可以有数组和链表两种形式; (1)数组结构实现容易; ( ...

  2. [转载]Windows网络编程系列教程之四:Select模型

    原文:http://www.51see.com/asp/bbs/public/bp_show.asp?t_id=200308131152297103 讲一下套接字模式和套接字I/O模型的区别.先说明一 ...

  3. 网络最大流dinic模板

    #include<iostream> #include<cstdio> #include<cstring> #include<queue> using ...

  4. 搭建基于Nagios的监控系统——之监控远程Linux服务器

    上一篇介绍了如何安装Nagios Core,这一篇跟大家分享一下如何将一台远程的Linux服务器加入纳入监控范围. 第一部分:在远程Linux上安装Nagios Plugins和NRPE   第一步: ...

  5. Oracle的rowid

    ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置. ROWID可以分为物理rowid和逻辑rowid两种.普通的堆表中的rowid是物理rowid,索引组织表 ...

  6. string.Format的困惑

    今天在执行一个format时出现了这样一个问题,困惑了很久,就是 string.Format("{0:00}",“1”)结果是1 string.Format("{0:00 ...

  7. 当在hive中show&nbsp;table&nbsp;…

    当在hive中show table 时如果报以下错时 FAILED: Error in metadata: javax.jdo.JDODataStoreException: Error(s) were ...

  8. day1 java基础回顾-Junit单元测试

    Junit单元测试框架的基本使用 一.搭建环境: 导入junit.jar包(junit4) 二.写测试类: 0,一般一个类对应一个测试类. 1,测试类与被测试类最好是放到同一个包中(可以是不同的源文件 ...

  9. 深度解析VC中的消息传递机制

    摘要:Windows编程和Dos编程,一个很大的区别就是,Windows编程是事件驱动,消息传递的.所以,要学好Windows编程,必须 对消息机制有一个清楚的认识,本文希望能够对消息的传递做一个全面 ...

  10. IIS 上传大文件 30MB 设置限制了上传大小

    用uploadify在IIS6下上传大文件没有问题,但是迁移到IIS7下面,上传大文件时,出现HTTP 404错误. 查了半天,原来是IIS7下的默认设置限制了上传大小.这个时候Web.Config中 ...