单点登录(二)cas服务端介绍

来源:互联网 发布:凤凰网域名注册 编辑:程序博客网 时间:2024/05/17 02:18

一、cas服务端接口

        CAS 服务端总共对外定义了9 个接口,客户端通过访问这9 个接口与服务端交互,这9个接口为(绿色接口为客户端能用到的接口):

接口

说明

/login

登录认证接口

/logout

退出接口,负责销毁认证cookie

/validate

验证ticket 用的接口,CAS1.0 定义

/serviceValidate

验证ticket 用的接口,CAS2.0 定义,返回xml 格式的数据

/proxy

支持代理认证功能的接口

/proxyValidate

支持代理认证功能的接口

/CentralAuthenticationService

用于和远程的web services 交互

/remoteLogin(新增)

远程登录认证接口

 

二、服务端配置文件

         login-webflow.xml:其中内容指定了当访问cas/login时的程序流程,初始“initialFlowSetup”

         cas-servlet.xml:servlet与class对应关系

         deployerConfigContext.xml:认证管理器相关

         cas.properties:系统属性设置

         applicationContext.xml:系统属性相关

         argumentExtractorsConfiguration.xml:不是很了解它的用途

         ticketExpirationPolicies.xml:ticket过期时间设置

         ticketGrantingTicketCookieGenerator.xml:TGT cookie属性相关,是否支持http也在这儿修改

         ticketRegistry.xml:保存ticket的类相关设置

         uniqueIdGenerators.xml:ticket自动生成类设置

         warnCookieGenerator.xml:同ticketGrantingTicketCookieGenerator.xml,生成的 cookie名为CASPRIVACY

三、接口详细说明:

        a) /login

             登录流程这部分要考虑到不同种类用户凭证的获取方案,以及客户应用传来的service 、gateway 、renew 参数的不同取值组合,CAS 为了实现流程的高度可配置性,采用了Spring Web Flow 技术。通过CAS 发布包里的login-webflow.xml 、cas-servlet.xml 、applicationContext.xml 这3 个文件,根据网上的资料和自己的理解,找出 了登录有关的所有组件,画出处理流程图。


图3  cas服务器端登录流程图

注:

1 : InitialFlowSetupAction: 是流程的入口。用 request.getContextPath() 的值来设置 cookie 的 Path 值, Cookie 的 path 值是在配置文件里定义的,但这个 Action 负责将 request.getContextPath() 的值设置为 Cookie 的 path 值,这是在 cas 部署环境改变的情况下,灵活地设置 cookie path 的方式;把 cookie 的值以及 service 参数的值放入 requestContext 的 flowscope 里。

2 : GenerateServiceTicketAction 此 Action 负责根据 service 、 GTC cookie 值生成 ServiceTicket 对象, ServiceTicket 的 ID 就是返回给客户应用的 ticket 参数,如果成功创建 ServiceTicket ,则转发到 WarnAction ,如果创建失败,且 gateway 参数为 true ,则直接redirect 到客户应用, 否则则需要重新认证。

3 : viewLoginForm 这是登录页面, CAS 在此收集用户凭证。 CAS 提供的默认实现是 /WEB-INF/view/jsp/simple/ui/casLoginView.jsp 。

4 : bindAndValidate 对应 AuthenticationViaFormAction 的 doBind 方法,该方法负责搜集登录页面上用户录入的凭证信息(用户名、密码等),然后把这些信息封装到 CAS 内部的 Credentials 对象中。用户在 casLoginView.jsp 页面上点击提交后,会触发此方法。

5:submit  对应 AuthenticationViaFormAction 的 submit 方法 , 如果 doBind 方法成功执行完, 则触发 submit 方法,此方法负责调用centralAuthenticationService 的      grantServiceTicket 方法,完成认证工作,如果认证成功,则生成 TicketGrantingTicket 对象,放在缓存里, TicketGrantingTicket 的 ID 就是 TGC Cookie 的 value 值。

6 : warn CAS 提供了一个功能:用户在一个 web 应用中跳到另一个 web 应用时, CAS 可以跳转到一个提示页面,该页面提示用户要离开一个应用进入另一个应用,可以让用户自己选择。用户在登录页面 viewLoginForm 上选中了 id=”warn” 的复选框,才能开启这个功能。

WarnAction 就检查用户有没有开启这个功能,如果开启了,则转发到showWarnView, 如果没开启,则直接redirect 到客户应用。

7 :SendTicketGrantingTicketAction 此Action 负责为response 生成TGC Cookie ,cookie 的值就是 AuthenticationViaFormAction 的submit 方法生成的 TicketGrantingTicket 对象的 ID 。

8 : viewGenerateLoginSuccess 这是 CAS 的认证成功页面。

b)/logout:( 对应实现类 org.jasig.cas.web.LogoutController )

处理逻辑:  

1) removeCookie

2) 在服务端删除TicketGrantingTicket 对象(此对象封装了cookie 的value 值)

3 )redirect 到退出页面,有2 种选择:

 if(LogoutController 的followServiceRedirects 属性为true 值,且url 里的service 参数非空){

                redirect 到 sevice 参数标识的url

             }

          else{

             redirect 到内置的casLogoutView (cas/WEB-INF/view/jsp/default/ui/casLogoutView.jsp ),如果url 里有url 参数,则此url 参数标识的链接会显示在casLogoutView 页面上。

           }

c)/serviceValidate: (对应实现类 org.jasig.cas.web.ServiceValidateController )

 处理逻辑: 

    如果service 参数为空或ticket 参数为空,则转发到failureView

    验证ticket 。以ticket 为参数,去缓存里找ServiceTicketImpl 对象,如果能找到,且没有过期,且ServiceTicketImpl 对象对应的service 属性和service 参数对应,则验证通过,验证通过后,请求转发至casServiceSuccessView验证不通过,则转发到failureView 。


参考:http://www.cnblogs.com/hellowood/archive/2010/08/05/1793364.html