`
kobe学java
  • 浏览: 257429 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

CAS 单点登录使用详解

 
阅读更多

 

CAS 单点登录使用详解

分类: CAS 266人阅读 评论(1) 收藏 举报

==============================================================================

开发环境 :MyEclipse6.5+tomcat6.0+JDK6.0+MySQL5.0+CAS

开发环境搭建 : 基本搭建环境省略不提

            这里主要介绍 CAS 环境搭建及配置步骤 :

1. 下载 CAS 的最新版本 :   服务端下载地址 : http://www.ja-sig.org/downloads/cas/

                       客户端下载地址 : http://www.ja-sig.org/downloads/cas-clients/

  这里下载的为 : 服务端 : cas-server-3.3.5-release.zip 客户端 : cas-client-2.0.11.zip

2. 关于 CAS 的详细介绍 , 可以查询网络 , 也可以参见我的另一篇笔记之 === >>

CAS 单点登录详细介绍 .docx

这里主要介绍它在单点登陆方面的使用及配置说明 :

3. 分别解压服务端端和客户端 zip 包 , 在服务端应用程序中找到 :cas-server-webapp-3.3.5.war

  只是 CAS 服务端验证的主要验证服务 , 修改文件名为 :cas.war, 然后将此 war 包部署到 tomcat 的 webapp 目录中 ;

 

  首先我们必须用 JDK 包中的 keytool 工具创建证书文件 :

 

  步骤 : 首先进入 cmd, 切换任意盘 : 如 F:

  输入 : F:/>keytool -genkey -alias server -keyalg RSA -keystore server.keystore

  回车 === >

  然后根据提示向导完成信息的详细填写 : 

  (

注意事项 :-alias server  中 server 为生成该证书的名字为 server, 也就是该证书的别名 ;

-keystore server.keystore 中的 server.keystore 为生成的证书文件的名字 ;

存放在 F: 盘下的 server.keystore 就是生成的证书文件

  然后根据提示信息输入密码 , 两次的秘密都相同 , 这里设置都输入密码 :tiankong 

  接下来为非常关键的一步 : 提示 === >> 你的名字与姓氏是什么 ?

  CAS 部署服务器机器中存在的域名,本机使用 localhost 测试 !

( 实际上是需要在 CAS 客户端服务配置中需要使用的自定义域名名称 ,

localhost 本身有定义 , 不需要自己再重新添加定义 , 这里我们先使用部署在同一

机器上的 localhost 默认域名 )

 

  这里输入 :localhost

  其他的可以随便输入 , 这里依次都输入为 tiankong

  提示正确吗 ?

  输入 :y  === >> 回车

  提示 : 输入 server 的主密码 :

(如果和 keystore 密码相同,按回车): ==== >> 回车

   终于完成 === >>> 证书文件生成成功 !

)

-----------------------------------------------------------------------------------------------------------------------------

输入 keystore 密码:

再次输入新密码 :

您的名字与姓氏是什么?

  [Unknown] :   localhost

您的组织单位名称是什么?

  [Unknown] :   tiankong

您的组织名称是什么?

  [Unknown] :   tiankong

您所在的城市或区域名称是什么?

  [Unknown] :   tiankong

您所在的州或省份名称是什么?

  [Unknown] :   tiankong

该单位的两字母国家代码是什么

  [Unknown] :   tiankong

CN=localhost, OU=tiankong, O=tiankong, L=tiankong, ST=tiankong, C=tiankong 正确吗?

  [ 否 ] :   y

输入 <server> 的主密码

        (如果和 keystore 密码相同,按回车):

 

F:/>

  -----------------------------------------------------------------------------------------------------------------------------

接下来我们必须在 tomcat6 的安装目录下的 conf 目录下找到 server.xml 文件 , 在其中找到以下已经注释的配置 :

  <!--

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

                    maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" />

  -->

  复制一份放在下面的位置 , 修改后的配置为 :

  <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

                    keystorePass="tiankong" keystoreFile="conf/server.keystore"

                    maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" />

  ( 注意 : 红色的部分是新添加上去的 , 这里用到了证书文件 sever.keystore, 放置的目录为 :tomcat6 的安装目录下的 conf 下 , keystorePass=”tiankong”, 指明了该证书文件的密码 , 其实就是生成证书时提示输入设置的密码 ! 上面设置为 :tiankong, 这里输入密码 :tiankong)

 

  接下来我们必须在 : 将 F: 盘下生成的 server.keystore 文件复制到 tomcat6 的安装目录下的  

  Conf 目录下 ;

 

  接下来我们测试我们这一步所作的配置操作是否有问题 :

  首先启动 tomcat6 服务器 , 确定没有错误信息 , 有一个小警告不用管 , 是提示我们修改 CAS 服务器默认的登录验证方式 ;( 只要用户名和密码正确 , 就可以成功的登录系统 )

  IE 地址栏中输入 :https://localhost:8443/  然后确定 tomcat6 控制台 , 也没有出现错误信息 ; 

  好了确定我们这一步的操作没有任何问题 !

  --------------------------------------------------------------------------------------------------------------------------

  好在这里我们还需要做一些工作为下面的操作服务 :

 

  导出密钥文件 : ==== >> 目的是将该密钥文件导入客户端服务器的 JVM 中 ;

  ( 必须指明别名 , 默认的别名为 mykey, 这里的别名就是创建证书文件时

  用 -alias server 参数指明的别名 :server)

 

  这里需要用到生成密钥文件的密码 :

  依然切换 server.keystore 文件所在的 F: 盘下 :

  输入命令 :

keytool -export -file server.crt -keystore server.keystore -storepass tiankong -alias server

这里指定了导出密钥文件的完整名称 :server.crt  指定了使用的证书文件 :server.keystore

证书文件的密码 :tiankong  证书文件的别名 :server

 

这是我们可以看到在在 F: 盘根目录下生成了密钥文件 :server.crt

 

  为库户端服务器的 JVM 导入密钥文件 :

 

  因为服务端 CAS 需要和客户端应用程序建立可靠 , 信任的通信 , 所以必须将服务端导出的密钥导文件导入到客户端应用程序服务器的 JVM 中 , 以建立可靠信任的连接通信 ; 这里由于是本机测试 , 可以直接在本机的 JVM 中导入信任密钥文件 ; 步骤如下 :

 

  注意 : 如果客户端应用部署在不同的计算机上 , 必须在那一台计算机中导入密钥文件 ;  

  ( 注意导入证书的时候最好指明证书的别名 , 便于查看和管理 ; 不指明默认的别名为 :mykey)

 

  ( 千万注意这里使用的 jre 的安装目录的位置 , 注意这里 tomcat 默认使用的 jre 是

单独的 jre 安装目录 , 不是 JDK 安装目录下所包含的 jre 安装目录 )

  首先切换到 Jre 的安装目录 : D:/MyProgram/Java/jre6/lib/security

  把上一步中导出的密钥文件复制到该目录下 ,

然后运行命令 :

keytool -import -keystore cacerts -storepass changeit -file server.crt -alias server

 

由于该目录下本身存在 cacerts 密钥文件库 , 本身的密码为 changeit, 所以这里使用密码 changeit, 否则 , 可以自己随意的指定任意的密码 ;

导入成功之后可以删除复制过来的多余的文件 ,server.crt

( 注意 Jre 默认的识别的证书库的文件名为 :cacerts, 不能自己任意指定名称 , 所以这里不能自己定义名称 , 下面的一种方式也是同理的证书库文件名不能自己随意指定 )

 

 

也可以在任意目录 :( 如 F: 盘 ) 运行 :

( 注意在这里我们可以任意的指定自己任意的密码 :tiankong)

keytool -import -keystore cacerts -storepass tiankong -file server.crt -alias server

然后 F: 盘下就会生成 cacerts 文件 , 然后将此文件复制到

Jre 的安装目录 : D:/MyProgram/Java/jre6/lib/security 目录下覆盖原有的 cacerts 文件 , 可是可以的 ;( 当然不主张这样的做法 , 这样会覆盖 Jre 中原有的一些证书 )

 

  另外在这里我们介绍以下查看证书文件中证书的方法以及删除证书文件中证书的方法 ;

  查看证书文件 :

  (1). 查看证书文件 :server.keystore

  keytool -list -keystore server.keystore -storepass tiankong –alias server

  (2). 查看证书文件 :cacerts

  keytool -list -keystore cacerts -storepass changeit -alias seasky

  ( 注意不指明别名查看的是证书文件中所有的证书 ; 指明别名 , 只查看别名为该名称的证书 )

 

删除证书文件中的别名为 seasky 的证书 : ( 删除证书的时候必须指明要删除证书的别名 )

(1)==== >>>

keytool -delete -keystore server.keystore -storepass tiankong -alias server

  (2)==== >>>

  keytool -delete -keystore cacerts -storepass changeit –alias server

 

  显示证书的详细信息 ==== >>> ( 也可以不指明证书别名 )

keytool -list -keystore server.keystore -storepass tiankong –alias server -v

 

4. 解压客户端 zip 包 , 在其中找到客户端的支持依赖 jar 包 : casclient.jar ( 这个 jar 包是客户端应用服务系统中必须要加入的依赖包 ), 任意新建一个 web 项目 . 例如 web 项目的名字为 :Web 举例 , 首先把该 Jar 包复制到该项目的 WEB-INF 目录下的 lib 目录下 ;

 

  然后需要在该项目的 web.xml 中配置 CAS 过滤器 :

  内容如下 :

  -------------------------------------------------------------------------------------------------------------------------------

    <filter>

       <filter-name> casFilter </filter-name>

       <filter-class>

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

       </filter-class>

       <init-param>

           <param-name>

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

           </param-name>

           <param-value> https://seasky:8443/cas/login </param-value>

       </init-param>

       <init-param>

           <param-name>

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

           </param-name>

           <param-value>

              https://seasky:8443/cas/proxyValidate

           </param-value>

       </init-param>

       <init-param>

           <param-name>

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

           </param-name>

           <param-value> localhost:8088 </param-value>

       </init-param>

    </filter>

    <filter-mapping>

       <filter-name> casFilter </filter-name>

       <url-pattern> /* </url-pattern>

   </filter-mapping>

-----------------------------------------------------------------------------------------------------------------------------

下面对该配置详细讲解 :

首先 : 该过滤器对所有的请求都会进行拦截 ; 由 filter-mapping 中的 /* 指明 ;

 

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

该参数指明验证没有通过需要转发的登录页面 !

 

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

该参数指明验证的地址 !

 

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

指明需要拦截验证的客户端应用程序域名和端口号 !

( 必须使用 localhost 域名映射本机的 iP 地址 )

 

千万注意 : 由于 CAS 路径不支持 IP 地址 , 只支持域名 ; 所以这里地址的配置的地址使用了

自定义的域名 === >>> seasky   另外一个域名是本身就存在的域名地址 :localhost 表示的是

本机的映射地址 :127.0.0.1 ( 可以在 C:/WINDOWS/system32/drivers/etc 路径下的 hosts 文件中查看定义 )

 

如果服务器端服务和客户端服务都部署在同一台计算器中 , 这里都统一使用 localhost 域名是没有问题的 ;

 

犹如这里使用了 seasky 自定义域名所以必须要添加自定义域名设置 , 同理在 hosts 文件

仿照 localhost 的定义添加一个 seasky 域名 , 如下 :

----------------------------------------------------------

127.0.0.1       localhost

192.168.8.21    seasky

----------------------------------------------------------

 

到这里我们基本配置完成 !

 

5. 下面我们进行测试 :

  在 IE 地址栏输入 :http://localhost:8088/Web 访问默认的 index.jsp 主页面 , 由于我们没有登录 , 所以页面会转发到 CAS 服务端同一的登录页面进行同一的登录页面进行登录 ; 输入用户名和密码 ,( 只要用户名和密码相同 ,CAS 默认的验证方式 , 实际使用的时候需要修改验证机制 ) 就可以正确的登录 Web 项目的 index.jsp 页面了 ! 这是如果就其他的客户端项目 , 只要在浏览器没有关闭的情况下 , 就可以直接访问了 , 退出之后不管访问那个客户端 , 都必须重新登录 , 其他的 web 项目的配置 , 和部署 , 参照该 web 项目的部署情况 )

 

===============================================================================

  下面我介绍当服务端应用和服务端应用部署在不同机器上的配置的区别和注意事项 :

 

(1). 首先创建证书的时候不能使用默认的本机域名 localhost, 必须添加自定义任意的

自定义域名 !

(2). 配置客户端的时候 , 我们必须注意使用的自定义的域名名称 !

(3). 由于部署在不能的机器 , 我们需要向部署客户端服务的服务器的 JVM 中导入证书文件 ;

   ( 导入的方法 , 上面已经介绍过 . 这里不再啰嗦 )

 

===============================================================================

在实际的运用 CAS 的时候我们需要修改 CAS 服务端 , 默认的验证机制 , 需要借助数据库来判断正确的用户名和密码 ;( 根据需要 CAS 的页码样式也需要作相应的调整 , 这里不做详细介绍 )

------------------------------------------------------------------------------------------------------------------------------

下面主要介绍数据库的验证机制 :

这里我们使用的数据库为 :MySQL5.0,

所以需要 MySQL 驱动包 ==== >>mysql-connector-java-5.0.5.jar

另外需要 ==>> cas-server-jdbc-3.0.5-rc2.jar 依赖包 ,

可以在 http://developer.jasig.org/repo/content/repositories/m1/cas/jars/ 此网站下载该依赖包 ;

 

把这两个依赖包复制到 cas 服务端的 WEB-INF 目录下的 lib 目录下 ;

 

修改默认的验证机制 :

在 cas 服务端的 WEB-INF 目录下 , 找到 deployerConfigContext.xml

 

在其中找到 bean 定义 :

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

然后将此 bean 的定义注释 ; 然后在它的下面添加如下 bean 定义 :

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">

       <property name="sql" value="select password from seasky where username=?" />

        <property name="dataSource" ref="dataSource" />

</bean>

此处的 SQL 语句指明了 , 需要查询数据表的验证机制 ;

( 千万注意表的的 username 字段的值不能重复 , 该字段的值必须是唯一的 , 不然无法验证成功 )

 

另外在 <beans></beans> 节点中添加一个数据源 bean 的定义如下 :

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">

<property name="driverClassName">

<value>com.mysql.jdbc.Driver</value>

</property>

   <property name="url">

<value>jdbc:mysql://192.168.8.4:3306/test</value>

</property>

   <property name="username"><value>neo</value></property>

   <property name="password"><value>test??</value></property>

</bean>

注意检查确保连接数据库的配置信息是正确的 ;

 

最后我们需要在 test 数据库建立下 seasky 表 === >>>

 Create TABLE `seasky` (
                  `username` varchar(30) NOT NULL default '',
                  `password` varchar(45) NOT NULL default '',
                  PRIMARY KEY  (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

插入数据记录 : ( 注意 username 字段的值不能重复 )

----------------------------------------------------------------------------------

 Insert INTO `seasky` (`username`,`password`) VALUES

                    ('tiankong1','admin'),

                   (' tiankong2','admin');

-----------------------------------------------------------------------------------

我们还需要在 Web 的 index.jsp 页面显示用户名 , 所以修改 index.jsp 页面 ;

<%@ page contentType= "text/html; charset=utf-8" %>

< html>

    < head>

       < title> This is web test jsp page!</ title>

    </ head>

    < body>

       < h1>

           This is tiankong work!

       </ h1>

       <%

String username =(String)session.getAttribute

( "edu.yale.its.tp.cas.client.filter.user" );

        %>

       < p> 当前得登陆用户: <%= username %> </ p>

       <%

           username = (String) session

          .getAttribute( "edu.yale.its.tp.cas.client.filter.user" );

       %>

        < p> 当前得登陆用户: <%= username %> </ p>

    </ body>

</ html>

 

最后需要验证一下 , 打开 IE 输入 http://localhost:8088/Web === >> 跳转 CAS 登录页面

==== >> 输入用户名 :tiankong1 密码 :admin ===== >>> 成功访问 Web 项目的 index.jsp 页面 !

===============================================================================                


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tiankong_dream/archive/2010/03/30/5432330.aspx

 

分享到:
评论

相关推荐

    CAS3.5.2单点登录详解.docx

    CAS 3.5.2 单点登录详解 CAS(Central Authentication Service)是一种流行的单点登录解决方案,主要用于提供统一身份验证和授权管理。CAS 3.5.2 是 CAS 的一个稳定版本,提供了许多实用的功能和配置项。在本文中,...

    cas单点登录详解(个人亲测)

    cas 单点登录 用户只需要登录一次就可以访问所有相互信任的应用系统。

    CAS单点登录配置全过程

    ### CAS单点登录配置全过程详解 #### 一、前言 CAS(Central Authentication Service)是一种开放源代码的单点登录(Single Sign-On, SSO)协议和服务实现,它允许用户在一个应用登录之后无需再次登录即可访问其他...

    CAS单点登录实例详细步骤

    ### CAS单点登录实例详细步骤解析 #### 一、引言 CAS(Central Authentication Service)是一种开放源码的单点登录(SSO)协议,它允许用户在一个应用中登录后,无需再次输入用户名和密码就能访问同一域内的其它...

    CAS单点登录服务器配置详情

    ### CAS单点登录服务器配置详解 #### 一、CAS单点登录概述 CAS(Central Authentication Service)是一种开放源代码的单点登录协议和服务框架,它为Web应用提供了一种简化了的身份验证流程。通过CAS,用户只需要在...

    CAS单点登录,退出后ticket失效报出异常解决办法—换jar包

    CAS单点登录,退出后ticket失效报出异常解决办法——换jar包 把客户端的 casclient.jar 包换成我的这个。

    CAS单点登录(SSO)教程

    ### CAS单点登录(SSO)教程详解 #### 前言 随着企业信息化建设的不断发展,用户需要在多个系统之间切换并重复登录的情况越来越常见,这不仅降低了用户体验,还增加了管理成本。为了解决这一问题,单点登录(Single ...

    CAS单点登录Demo

    在本文中,我们将深入探讨CAS单点登录的基本原理、工作流程以及如何通过提供的Demo进行实践操作。 **CAS基本原理** CAS的核心思想是用户只需在一个应用系统中验证身份,之后访问其他所有支持CAS的应用系统时都不再...

    cas 单点登录 耶鲁大学单点登录

    CAS单点登录的基本原理是通过一个中心认证服务器来进行用户的统一认证和管理。当用户首次访问某个受保护的应用时,该应用会重定向用户到CAS服务器进行认证;一旦用户通过CAS服务器认证,CAS会向用户提供一个Ticket...

    无https验证的CAS单点登录

    **无HTTPS验证的CAS单点登录详解** CAS(Central Authentication Service,中央认证服务)是一种广泛应用于Web应用程序的身份验证框架,旨在提供一种集中化的身份验证机制,使得用户只需一次登录即可访问多个相互...

    CAS 单点登录配置说明

    总结,CAS单点登录配置涉及SSL安全设置、CAS服务器的部署、客户端应用的集成以及证书的管理等多个环节。理解并掌握这些知识点,对于构建安全、便捷的多应用系统环境至关重要。希望本文提供的信息对您在配置CAS单点...

    Android端实现单点登录的方法详解

    总的来说,Android端实现单点登录是一个涉及服务端和客户端协同的过程,涉及到Token管理、错误码处理、监听器使用以及用户下线流程的控制。通过合理的设计和实现,可以有效地提高应用的安全性和用户体验。

    Pentaho 5.4.0.1 + CAS单点登录配置文档

    **Pentaho 5.4.0.1与CAS单点登录配置详解** Pentaho是一款开源的企业级商业智能(BI)平台,提供数据集成、分析、报告和仪表板等功能。在5.4.0.1版本中,Pentaho支持与其他系统集成,包括使用中央认证服务(Central...

    Yelu 大学 cas 单点登录实例

    【Yelu大学CAS单点登录实例详解】 在IT行业中,单点登录(Single Sign-On,简称SSO)是一种网络认证机制,它允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。Yelu大学采用的是CAS(Central ...

    CAS单点登录系统.doc

    ### CAS单点登录系统知识点详解 #### 一、CAS简介 CAS(Central Authentication Service)是由耶鲁大学发起的一项开源项目,其目标在于为Web应用提供可靠且统一的单点登录解决方案。自2004年12月起,CAS成为了JA-...

Global site tag (gtag.js) - Google Analytics