22 CAS实现单点登录体验

0. 文档介绍 ... 2

0.1 文档目的 ... 2

0.2 文档范围 ... 2

0.3 读者对象 ... 2

0.4 参考文献 ... 2

0.5 术语与缩写解释 ... 2

1.     概述 ... 3

1.1 背景 ... 3

1.2 环境 ... 3

1.3 下载资源 ... 3

2. 配置 CAS SERVER .. 4

2.1 简单配置 ... 4

2.2 数据库验证配置 ... 5

2.3 参数配置 ... 8

2.4HTTPS 验证配置 ... 10

2.5 自定义页面 ... 14

3. 配置 JAVA CLIENT . 17

3.1HTTPS 验证 ... 17

3.2HTTP 验证 ... 19

4. 配置 DOTNET CLIENT . 20

5. 配置 PHP CLIENT . 24

6. 如何实现单点注销 ... 24


0.
文档介绍

0.1 文档目的

记录使用 CAS 实现 SSO 的过程。

0.2 文档范围

    使用 CAS 实现 SSO 的过程

0.3 读者对象

    任何有兴趣的家伙。

0.4 参考文献

提示: 列出本文档的所有参考文献(可以是非正式出版物),格式如下:

[ 标识符] 作者,文献名称,出版单位(或归属单位),日期

 

大部分都是网络上查询的资料,很多,不列举了。

 

0.5 术语与缩写解释

缩写、术语

SSO

Single sign on/off ,单点登录 / 退出

CAS

全称 JA-SIG Central Authentication Service ,实现 SSO 的开源项目

 

 

 

 

 

 

 

1.       概述

1.1 背景

       单点登录是必须的,实现方式颇多,这里就说使用 CAS 的实现方式。使用 CAS 实现 SSO ,网络上说明很多,大部分都是从制作证书开始,而实际上是可以不使用 HTTPS 验证,这样更方便。

       单点登录的原理是通过拦截 你设定的 URL ,并跳转到 你指定的 CAS SERVER 登录页,当你登录成功后,带着 TICKET ,返回到 你打开的 URL 。然后你就可以一票在手,畅通无阻。

       网上有个家伙用旅游的套票来解释单点登录,非常形象。当你到达一个旅游区门口,你可以买一个套票,套票规定你可以游览 N 个景点,进入这些景点的时候,你不需要再买票,也就实现了单点登录。

       同时,也可以借用这个比喻说明一下单点注销。当你打开一个应用 A 时,单击了注销按钮,跳转到 http://hostname:port/cas/logout 或者 https://hostname:port/cas/logout ,系统显示注销成功。此时, IE 窗口没有关闭,你继续打开应用 A ,仍然没有注销成功,不需要登录。这就相当于你已经在旅游景点内,即使你把套票撕毁了,你仍然可以继续参观这个景点,不会把你驱逐出去。但是,你再也进不了其它的景点了。

       那么怎么实现立即生效的注销呢?或者这种方式是否就满足我们的需求呢?

1.2 环境

       Windows XP JDK1.6.03 Tomcat6.0.20

注意:配置好环境变量。

1.3 下载资源

服务器端: http://www.ja-sig.org/downloads/cas

当前最新版本是 3.3.4 ,测试安装的版本为 3.3.3

cas-server-3.3.3-release.zip

客户端: https://www.ja-sig.org/svn/cas-clients/

       cas-client-2.0.11.zip               JAVA 支持单点登录

       cas-client-3.1.8-release.zip            JAVA 支持单点注销

       dotnet-client                                 DOTNET 支持类

       phpcas                                        PHP 支持

      

注意:同时要下载源代码,部分功能需要修改源代码,重新做包。

2. 配置 CAS SERVER

CAS SERVER 目录介绍。

2.1 简单配置

       把你下载 cas-server 解压,进入 cas-server-3.3\modules ,复制 cas-server-webapp-3.3.war tomcat\webapps 下,修改名称为 cas.war ,方便使用,原来的名字太长了。然后启动 IE ,输入 http://localhost:8080/cas 检验是否可以访问,如果可以,则输入相同的用户名和密码,比如 cas/cas ,测试是否能登录。

       如果你对安全性要求不高且急不可待,这个时候就可以直接进行 CAS CLIENT 的配置。

 

2.2 数据库验证配置

       简单配置后,可以使用相同的用户名和密码,进行登录。这个不实际,可以通过配置实现连接自己的数据库进行配置。这里有个前提,就是所有系统需要使用相同的用户表和密码加密方法,可以使用 CAS 自带的加密方法( \org\jasig\cas\authentication\handler\ DefaultPasswordEncoder.class )或自己用 JAVA 写的加密方法。

       进入目录 tomcat\webapps\cas\WEB-INF ,打开文件 deployerConfigContext.xml ,找到类似下面的代码:

注意 cas-server 根据版本不同 文件的路径或 BEAN 位置可能不同 逐个文件夹找下。

 

 

这是默认的方法。同时还有两种可选,如下:

             

             

             

/************************************************************************/

                        abstract="false" lazy-init="default" autowire="default" dependency-check="default">

                           

                       

                       

                       

                       

                       

以上两种方式都经过测试。另外,也可以写出自己的方法验证,修改 BEAN CLASS 属性即可。如果没有密码没有加密,则可以把参数 去掉。

 

下面针对最下面的方法进行说明。

       看它的属性,还需要定义两个 BEAN ,数据源和加密,如下:

      

      

                    

                    

                    

                    

           

      -->  

   

        edu.yale.its.tp.cas.grantingTimeout

        7200

   

2.4HTTPS 验证配置

       证书的制作使用 keytool 工具,进入 CMD ,输入 keytool ,回车测试,如果出现帮助,则说明环境变量配置正确,如果没有,则配置 PATH ,加入 %JAVA_HOME%\BIN

下面开始制作,先找好存放证书的位置:

(1)        keytool -genkey -alias tomcatcas -keystore tomcatcas -keyalg RSA -validity 3666

这一步是制作密钥库。

注意:名字与姓氏要输入主机名或域名或 localhost ,不能随意输入。密码为自己设定。下面的密码直接回车。

2 keytool -export -alias tomcatcas -keystore tomcatcas -file tomcatcas.crt

       这一步是把密钥库导出为证书文件。

注意:密码为上一步设定的密码。

 

3 keytool -import -alias tomcatcas -file tomcatcas.crt

-keystore %JAVA_HOME%/jre/lib/security/cacerts

         这一步是把证书导入 TOMCAT

后面的路径为 TOMCAT 使用的 JRE 路径, JDK1.6 安装有两个目录 JDK1.6 JRE1.6 TOMCAT6.0 只要 JRE1.6 即可,通常在安装时,也都是默认到 JRE1.6 ,这时要输入 %JRE_HOME%\lib\security\cacerts ,这个地方必须要确认准确。

         注意:这里需要输入密码,此密码不是前面设定的密码,是系统默认的密码 changeit

 

4 )配置 tomcat6.0\conf\server.xml

  org.jasig.cas.client.session.SingleSignOutHttpSessionListener

    CAS Single Sign Out Filter

    org.jasig.cas.client.session.SingleSignOutFilter

CAS Filter

edu.yale.its.tp.cas.client.filter.CASFilter

下面两个为验证地址,即 cas server 的地址,如果使用 https 验证,地址为 https://hostname:8443 字样 - ->

   

      edu.yale.its.tp.cas.client.filter.loginUrl

       http://c7.byd.com:8080/cas/login

   

   

       edu.yale.its.tp.cas.client.filter.validateUrl

       http://c7.byd.com:8080/cas/serviceValidate

本工程的 URL ,被拦截的地址 - ->

   

       edu.yale.its.tp.cas.client.filter.serverName

       localhost:8080

   

 

    CAS Single Sign Out Filter

    /*

 

    CAS Filter

    /*

       3 、在页面获得验证返回的用户

用户可以通过以下方式,从 JSP servlet 中获取通过认证的用户名:

String username = (String)session.getAttribute(edu.yale.its.tp.cas.client.filter.CASFilter.CAS_FILTER_USER);

 

获得更完整的受认证用户信息对象 CASReceipt Java Bean ,可以使用以下语句:

CASReceipt  receipt = (CASReceipt )session.getAttribute(edu.yale.its.tp.cas.client.filter.CASFilter.CAS_FILTER_RECEIPT);

 

      

       完成以上后,进行测试。出现错误时,请查看 tomcat\logs 文件解决。

3.2HTTP 验证

       1 、修改 casclient.jar 中文件,如图:

      

       2 、重新做 jar 包,复制到工程目录

      

       完成后,做好测试。登录成功后的样子,如下图:

4. 配置 DOTNET CLIENT

       1 、把 DotNetCasClient.cs 复制到 DotNet 项目

 

 

       2 、新建 loginPage.aspx Page_Load 加入代码

DotNetCASClient.DotNetCASClientServiceValidate client = new DotNetCASClient.DotNetCASClientServiceValidate();

            String userId = client.Authenticate(Request, Response, false);

            if (userId.Equals("failed"))

            {

                //Handle the auth failure...

            }

            else

            {

                Session[DotNetCASClient.SessionHandle.getUserSession()] = userId;

                FormsAuthentication.RedirectFromLoginPage(userId, false);

            }

注意: FormsAuthentication.RedirectFromLoginPage 这个方法。

      

 

       3 、在 Default.aspx Page_Load 内加入获得用户的代码:

       4 、修改 web.config 文件

        

                  

                  

                  

        

        

 

   

                  

                           

                  

                  

                           

                  

        

      

      

       完成后,运行测试,效果如下图:

Cas 为用户名。

5. 配置 PHP CLIENT

6. 如何实现单点注销

 

 

请使用浏览器的分享功能分享到微信等