cas单点登录配置全攻略

一.  SSO (Single Sign-on)原理

SSO 分为Web-SSO和桌面SSO。桌面 SSO 体现在操作系统级别上。Web-SSO体现在客户端,主要特点是: SSO 应用之间使用 Web 协议 ( 如 HTTPS) ,并且只有一个登录入口。我们所讲的SSO,指 Web SSO 。

 

SSO 的体系中,有下面三种角色:

²  User(多个)

²  Web应用(多个)

²  SSO认证中心(一个)

 

SSO 实现模式千奇百怪,但万变不离其宗,包含以下三个原则:

l  所有的登录都在 SSO 认证中心进行。

l  SSO 认证中心通过一些方法来告诉 Web 应用当前访问用户究竟是不是通过认证的用户。

l  SSO 认证中心和所有的 Web 应用建立一种信任关系。

二.CAS 的基本原理

CAS(CentralAuthentication Service) 是 Yale 大学发起的构建 WebSSO 的 Java开源项目。

 

1.        CAS 的结构体系

u  CAS Server

CAS Server 负责完成对用户信息的认证,需要单独部署,CAS Server 会处理用户名 / 密码等凭证 (Credentials) 。

 

u  CAS Client

CAS Client部署在客户端,当有对本地 Web 应用受保护资源的访问请求,并且需要对请求方进行身份认证,重定向到 CAS Server 进行认证。

 

2.        CAS 协议

 

基础协议

 

上图是一个基础的 CAS 协议, CAS Client 以 过滤器的方式保护 Web 应用的受保护资源,过滤从客户端过来的每一个 Web 请求,同时, CAS Client 会分析HTTP 请求中是否包请求 Service Ticket( 上图中的 Ticket) ,如果没有,则说明该用户是没有经过认证的, CAS Client 会重定向用户请求到 CAS Server ( Step 2 )。 Step 3 是用户认证过程,如果用户提供了正确的认证信息 , CAS Server 会产生一个随机的 Service Ticket ,会向 User 发送一个 Ticketgranting cookie (TGC) 给 User 的浏览器,并且重定向用户到 CAS Client (附带刚才产生的 Service Ticket),Step 5 和Step6 是 CAS Client 和 CAS Server 之间完成了一个对用户的身份核实,用 Ticket 查到 Username ,认证通过。

3.        CAS 如何实现 SSO

当用户访问Helloservice2再次被重定向到 CAS Server 的时候, CAS Server 会主动获到这个 TGC cookie ,然后做下面的事情:

 

1)       如果 User 的持有 TGC 且其还没失效,那么就走基础协议图的 Step4 ,达到了 SSO 的效果。

2)       如果 TGC 失效,那么用户还是要重新认证( 走基础协议图的 Step3)。

 

其中:

ST:Service Ticket,用于客户端应用持有,每个ST对应一个用户在一个客户端上

TGT:Ticket Granting Ticket,存储在CAS服务器端和用户cookie两个地方

认证流程分析:

1:用户第一次访问受保护的应用。受保护的应用通过其中配置的统一认证过滤器队请求进行过滤,未发现在session中有特定的用户信息,也未发现有ST参数。

2:应用系统将认定用户第一次进入受保护的系统中,重定向到统一认证系统中特定的路径。通常该路径为 https:// 统一认证IP:端口/casserver/login

3:统一认证系统判断用户在统一认证系统中是否登录过。

4:如果没有登录过,则将用户定向到登录界面。

5:用户在登录界面输入用户名和密码等信息,并进行提交。

6:统一认证系统验证用户提交的凭证是否正确,如果正确,生成cookie形式的TGT(ticketgrant ticket)和一个ST(serviceticket)。并通过重定向跳回到受保护的系统中。并且,将ST作为参数附加在URL后面。

7:进入受保护系统中,请求经由统一认证过滤器进行过滤,发现虽然在session中不存在特定的用户信息,但是存在ST票据。

8:有统一认证客户端持有ST票据通过http请求,发送到统一认证端进行认证票据的有效性。

9:统一认证系统认证票据有效,相应用户信息到受保护系统。

10:受保护访问资源。

 

 

三.实践配置

下面我们以tomcat 6.0为例进行说明(这里,我将Server和Client放在两个Tomcat服务器下)。

下载cas-server-3.5.2.zip和cas-client-3.2.1和apache-tomcat-6.0.24

第一步:配置CAS服务器环境

1、在企业内部网内该预备cas服务器主机中搜索hosts文本文件,添加域名映射对 ip  我这里用localhost。

2、在客户主机中搜索hosts文本文件,添加相应cas服务器域名映射信息

3、部署CAS3服务器端所需得ssl环境生成

   预备生成文件: cacerts server.keystore client.keystore
    server.cer client.cer

生成服务器端库文件 (生成的时候,第一项name一定要写你的完整计算机名称,我的是lin)
keytool -genkey -alias tomcat-server -keyalg RSA -keypass changeit -storepasschangeit -keystore server.keystore

导出服务器端证书
keytool -export -alias tomcat-server -storepass changeit -file server.cer-keystore server.keystore
生成客户端库文件
keytool -genkey -alias tomcat-client -keyalg RSA -keypass changeit -storepasschangeit -keystore client.keystore
导出客户端证书
keytool -export -alias tomcat-client -storepass changeit -file client.cer-keystore client.keystore

导入服务器端证书
keytool -import -trustcacerts -alias server -file server.cer -keystore cacerts-storepass changeit
导入客户端证书
keytool -import -trustcacerts -alias client -file client.cer -keystore cacerts-storepass changeit

4将如上生成得cacerts server.keystore client.keystore
    server.cer client.cer文件分别拷贝到cas服务器以及应用客户端TOMCAT_HOME主目录以及JAVA_HOEM/jre/lib/security文件下(每个子系统的tomcat也要拷贝进去)

5 解压下载的CASSERVER 包,找到/cas-server-3.3.5-release/cas-server-3.3.5/modules下的cas-server-webapp-3.3.5.war,更名为cas3.war,拷贝到TOMCAT的webapp目录下,tomcat启动时,会自动解压。

 

配置好JDK1.6(CMD命令JAVA–version 要是配置的JDK版本,否则没配置好),部署好TOMCAT。

这里就不多说了,再来部署CAS SERVER。

 

先配置服务端TOMCAT SSL:

       先解压一个TOMCAT6,我是到C:/Program Files/目录下;进入tomcat目录的conf目录下,编辑server.xml,

找到(默认的端口号不用改)

<!--<Connectorport="8443" protocol="HTTP/1.1" SSLEnabled="true"

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

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

去掉注释,这段段代码替换成:

       <Connectorprotocol="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:/ProgramFiles/apache-tomcat-6.0.24/server.keystore"    

          keystorePass="changeit"/>  

运行:https://localhost:8443/,出现tomcat的首页,则说明cas服务端配置成功。

 

第二步:配置CAS客户端环境

再解压一个tomcat6,放在D盘,更名为casclient,这里因为在同一台电脑上,所以要更改端口号:

<Server port="8006"shutdown="SHUTDOWN">《!—修改1 --》

<Connectorport="9090"

               maxThreads="150"minSpareThreads="25" maxSpareThreads="75"

               enableLookups="false"redirectPort="8080" acceptCount="100"

               debug="0"connectionTimeout="20000"

              disableUploadTimeout="true" /> 《!—修改2 --》

 

  <Connectorport="8010" protocol="AJP/1.3"redirectPort="8443" /> 《!—修改3 --》

当然,证书文件都要拷贝到这个目录的根目录下。


在客户端应用程序的web.xml文件中加入如下: modules下的相关jar包,拷贝到客户端系统的lib目录下)

 

客户端3.2.版本,支持登出功能

 

<!--单点登出-->

<listener>  

       <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>  

    </listener>  

      

    <filter>  

       <filter-name>CASSingle Sign Out Filter</filter-name>  

       <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>  

    </filter>

    <filter-mapping>  

    <filter-name>CASSingle Sign Out Filter</filter-name>  

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

 </filter-mapping>  

   

<!-- 该过滤器负责用户的认证工作,必须启用它-->   

<filter>  

    <filter-name>CASAuthentication Filter</filter-name>  

    <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>  

    <init-param>  

       <param-name>casServerLoginUrl</param-name>  

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

    </init-param>  

    <init-param> 

    <!--这里的server

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值