cas单点登录实例生成过程详细讲解

最近公司让我研究cas单点登录,经过一周多的研究终于做出了demo,为了方便自己以后查看也为了给需要的人提供帮助,我决定写成博客。

首先对于单点登录的原理需要有大致的了解,原理网上的帖子很多,我大致说下:

cas单点登录实例生成过程详细讲解_第1张图片 
CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。对于访问受保护资源的每个 Web 请求,CAS Client 会分析该请求的 Http 请求中是否包含 Service Ticket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的 CAS Server 登录地址,并传递 Service (也就是要访问的目的资源地址),以便登录成功过后转回该地址。用户在第 3 步中输入认证信息,如果登录成功,CAS Server 随机产生一个相当长度、唯一、不可伪造的 Service Ticket,并缓存以待将来验证,之后系统自动重定向到 Service 所在地址,并为客户端浏览器设置一个 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新产生的 Ticket 过后,在第 5,6 步中与 CAS Server 进行身份合适,以确保 Service Ticket 的合法性。
在该协议中,所有与 CAS 的交互均采用 SSL 协议,确保,ST 和 TGC 的安全性。协议工作过程中会有 2 次重定向的过程,但是 CAS Client 与 CAS Server 之间进行 Ticket 验证的过程对于用户是透明的。 
CAS Server主要负责用户名密码等的认证工作。 
由于cas既可以使用https协议也可以使用http协议,由于没有特殊要求故本人选择了http请求做实例分析。 
第一步:从官网下载最新版本的casServer和casClinet,地址: 
https://www.apereo.org/projects/cas/download-cas 
我使用的版本是cas-server-4.0.0和cas-client-3.3.3以eclipse工具为例。 
第二步:复制三份tomcat,分别为tomcat-server和tomcat-client1、tomcat-client2 
第二步;解压下载下来的服务端和客户端,将cas-server-4.0.0\modules下的cas-server-webapp-4.0.0.war复制到tomcat-server下的webapps,启动tomcat(tomcat/bin/startup.bat),输入:http://localhost:8080/cas-server-4.0.0默认会跳转到登陆页面,这里说明一下,使用cas-server3.3.3版本认证的方法是: 
org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler 
此方法默认用户名密码一致就可以登录,但是4.0以后版本默认认证方式变了,变为: 
org.jasig.cas.authentication.AcceptUsersAuthenticationHandler 
用户名和密码是写死的,用户名是:casuser,密码是:Mellon 
配置认证方式的配置文件为:cas-server\Webapp\WEB-INF\deployerConfigContext.xml 
第三步:在eclipse中新建一个web工程,名字为cas-server,将tomcat-server\webapps\cas-server-4.0.0\WEB-INF\classes下面的所有文件全部复制到工程的src下面,将WEB-INF下面的别的内容复制到webapp下,将之前tomcat目录下的webapps的war包和解压的内容删除。 
第四步:配置客户端 
修改tomcat-client1和tomcat-client2端口号,分别修改的地方为:

 
 
 

端口号随意只要不和原来的默认的相同就行 
第五步:eclipse中新建两个客户端demo和demo1(都是web工程),复制cas-client-3.3.3\modules下面所有jar包到 
工程的lib目录下 
第六步:修改web.xml文件,添加如下内容:

 
    




 org.jasig.cas.client.session.SingleSignOutHttpSessionListener



 CAS Single Sign Out Filter
 org.jasig.cas.client.session.SingleSignOutFilter


 CAS Single Sign Out Filter
 /*



 CASFilter
 org.jasig.cas.client.authentication.AuthenticationFilter
 
  casServerLoginUrl
  
  http://localhost:8080/cas-server/login
  
 
  serverName
  
  http://localhost:8081
 


 CASFilter
 /*



 CAS Validation Filter
 org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
 
  casServerUrlPrefix
  
  http://localhost:8080/cas-server
 
 
  serverName
  
  http://localhost:8081
 
 
 
  CAS Validation Filter
  /*
 
 
 
  CAS HttpServletRequest Wrapper Filter
  org.jasig.cas.client.util.HttpServletRequestWrapperFilter
 
 
  CAS HttpServletRequest Wrapper Filter
  /*
 
 
 
  CAS Assertion Thread Local Filter
  org.jasig.cas.client.util.AssertionThreadLocalFilter
 
 
  CAS Assertion Thread Local Filter
  /*
 


index.jsp页面添加如下内容:

<%AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();
    String username = principal.getName();
 %>
  用户名:<%=username %>   
 退出
 进入客户端2

客户端1和2配置完全相同,将之前新建的三个tomcat添加进来,将三个工程分别添加进tomcat中,启动tomcat, 
浏览器输入:http://localhost:修改的客户端端口号/项目名称,因为配置了cas就会自动跳转至服务器的登录页面,输入用户名密码即可登录,登录完成后就又会返回到客户端1,点击进入客户端2会发现无需再次登录即可直接访问客户端2

第七步:使用数据库验证用户名密码: 
deployerConfigContext.xml里注释掉默认的验证方式primaryAuthenticationHandler添加我们自己的通过数据库匹配的验证方式


  
  
  
  
 
 
  
  
      
  
  
  
 
 加上以下方式,相当于dbmodeHandler数据库查出的用户名密码和primaryPrincipalResolver用户输入的对比,相等则登陆成功。
 
                
     

至此,单点登录完整的demo算是成功了,但是还有一点小小问题需要说明下,网上曾经有人说将cas-servlet.xml中的p:followServiceRedirects里的false改为true,即可使用logout输入service参数为自己设置的退出页面,千万不要这样设置,这样设置后无法退出我亲自试验过,加参数只需要像我的index.jsp页面那样直接后缀加上: 
?service=http://localhost:8081/demo/index.jsp即可。

以下是此文章写好的demo,需要的可自行下载 
http://download.csdn.net/detail/danruoshui315/9052885 
http://download.csdn.net/detail/danruoshui315/9053055

你可能感兴趣的:(22,单点登录)