zoukankan      html  css  js  c++  java
  • SSO基于cas的登录

    概念介绍

    1.定义

    CAS ( CentralAuthentication Service ) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 WebSSO )。

    2.结构体系

    从结构体系看, CAS 包括两部分: CAS Server 和 CAS Client 

    CAS Server 负责完成对用户的认证工作 需要独立部署 CAS Server 会处理用户名 密码等凭证(Credentials) 

    CASClient负责处理对客户端受保护资源的访问请求,需要对请求方进行身份认证时,重定向到 CAS Server 进行认证。(原则上,客户端应用不再接受任何的用户名密码等 Credentials )。CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。

    3.基础模式

    基础模式 SSO 访问流程主要有以下步骤:

    1访问服务: SSO 客户端发送请求访问应用系统提供的服务资源。

    2定向认证: SSO 客户端会重定向用户请求到 SSO 服务器。

    3用户认证:用户身份认证。

    4发放票据: SSO 服务器会产生一个随机的 Service Ticket 

    5验证票据: SSO 服务器验证票据 Service Ticket 的合法性,验证通过后,允许客户端访问服务。

    6传输用户信息: SSO 服务器验证票据通过后,传输用户认证结果信息给客户端。

    简单实现

    为了方便我就在一台电脑上进行演示了。可以把ServerClient放在不同的电脑上进行演示。

    1.准备工作

    1)下载:

            CAS-Serverhttp://www.jasig.org/cas/download

            CAS-Clienthttp://downloads.jasig.org/cas-clients/

    2)准备三个Tomcat

    Server端和Client端放在不同的Tomcat中。分别为Tomcat-cas,Tomcat-client1Tomcat-client2。因为用了三个Tomcat需要都启动起来,所以需要先修改一下Tomcat的端口号以防冲突。

     

    2.部署CAS-Server相关的Tomcat

    1)把Server包中的cas-server-webapp部署到tomcat下。

    2)更改协议

    CAS默认使用的是HTTPS协议,如果使用HTTPS协议需要进行证书的生成等一系列操作。我们项目中使用的是http协议,所以就不用进行这些证书的验证。

    但是需要修改配置文件,让它可以使用http协议进行访问。

    修改cas-server-webapp/WEB-INFdeployerConfigContext.xml文件。

    增加参数p:requireSecure="false"。

    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"  
    2.                     p:httpClient-ref="httpClient"   
    3.                      p:requireSecure="false"/>  

    修改cas-server-webapp/WEB-INF/spring-configuration中的ticketGrantingTicketCookieGenerator.xml

    P:cookieSecure 属性 修改为 false

    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"  
    2.         p:cookieSecure="false"  
    3.         p:cookieMaxAge="-1"  
    4.         p:cookieName="CASTGC"  
    5.         p:cookiePath="/cas" />  

    3)启动tomcat-cas测试服务的端是否可以正常使用。在浏览器中输入:http://localhost:8080/cas/login


    可以正常使用。

     

    3.部署CAS-Client相关的Tomcat

    1)准备好一个项目做客户端的演示,部署到Tomcat-client1中。(刚开始我随便建立一个项目,直接用index.jsp做测试没有成功,后来才知道原来只有受保护的资源访问的时候才能跳转到登陆页。

    2)从cas-client-3.2.0-release.zip中找到cas-client-core-3.2.1.jarcommons-logging-1.1.jar放到Tomcat-client1/webapps/cas_test/WEB-INF/lib中。

    3)在Tomcat-client1/webapps/cas_test/WEB-INF/web.xml中增加如下内容。

    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. ========================单点登录开始 ========================-->    
    2.                 <listener>  
    3.                         <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>  
    4.                 </listener>  
    5.         <!--该过滤器用于实现单点登出功能,可选配置。-->    
    6.                 <filter>    
    7.                         <filter-name>CASSingle Sign OutFilter</filter-name>    
    8.                         <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>    
    9.                 </filter>    
    10.                 <filter-mapping>    
    11.                         <filter-name>CASSingle Sign Out Filter</filter-name>    
    12.                         <url-pattern>/*</url-pattern>    
    13.                 </filter-mapping>    
    14. <filter>    
    15.                         <filter-name>CASFilter</filter-name>    
    16.                         <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>    
    17.                         <init-param>    
    18.                                 <param-name>casServerLoginUrl</param-name>    
    19.                                 <param-value>https://localhost:8080/cas/login</param-value>    
    20.                         </init-param>    
    21.                         <init-param>    
    22.                                 <param-name>serverName</param-name>    
    23.                                 <param-value>http://localhost:18080</param-value>    
    24.                         </init-param>    
    25.                 </filter>    
    26.                 <filter-mapping>    
    27.                         <filter-name>CASFilter</filter-name>    
    28.                         <url-pattern>/*</url-pattern>    
    29.                 </filter-mapping>    
    30.                 <!--该过滤器负责对Ticket的校验工作,必须启用它-->    
    31.                 <filter>    
    32.                         <filter-name>CASValidationFilter</filter-name>    
    33.                         <filter-class>    
    34.                                 org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>    
    35.                         <init-param>    
    36.                                 <param-name>casServerUrlPrefix</param-name>    
    37.                                 <param-value>https://localhost:8080/cas</param-value>    
    38.                         </init-param>    
    39.                         <init-param>    
    40.                                 <param-name>serverName</param-name>    
    41.                                 <param-value>http://localhost:18080</param-value>    
    42.                         </init-param>    
    43.                 </filter>    
    44.                 <filter-mapping>    
    45.                         <filter-name>CASValidationFilter</filter-name>    
    46.                         <url-pattern>/*</url-pattern>    
    47.                 </filter-mapping>    
    48. <!--    
    49.            <!-- ========================单点登录结束 ======================== -->  

    4)把项目部署到Tomcat-client2上,同上操作。

    5)分别开启Tomcat-cas,Tomcat-client1Tomcat-client2

    4.测试结果

    访问client1的时候跳转到登陆页面,然后进行登陆就会跳转到要访问的页面。然后紧接着访问client2,直接就会跳转到要访问的页面,不用进行登陆。

    在浏览器中打开第一个clent1的项目,会出现以下界面:


    说明需要进行验证。验证通过以后出现下面界面:

    然后打开client2项目,直接回出现下面界面。

    说明测试成功。用户只需登录一次就可以访问所有相互信任的应用系统。

  • 相关阅读:
    TCP/UDP模型
    分时技术
    Linux文件浏览命令
    Maven下载私服上的jar包(全局)
    Maven下载私服上的jar包
    Maven将中央仓库修改为阿里云的仓库地址
    数据结构之算法初涉(2)
    数据结构之概念初涉(1)
    JAVA中GridBagLayout布局管理器应用详解
    C++数据结构中的基本算法排序
  • 原文地址:https://www.cnblogs.com/fengli9998/p/6560343.html
Copyright © 2011-2022 走看看