`

让CAS支持客户端自定义登陆页面——原理篇

    博客分类:
  • cas
cas 
阅读更多

最近忙死了,很久都没写博客了。公司要做SSO应用,有部门有需求希望能够在自己的应用端定义登陆页面,而不是登陆全跳转到CAS统一登陆界面。看了下CAS服务器端源码,还算好懂,于是脱了衣服开始搞。。。。。

这篇主要是介绍修改原理等,如果嫌麻烦,可以跳过这篇直接看实现篇

两个方案,分别支持客户端使用iframe+js和重定向技术进行远程登录,在此先给出重定向技术的方案。

此方案主要是通过页面重定向来实现客户端独立登陆页面

基本原理

首先,在我们修改之间,先了解以下CAS运行基本原理。CAS服务器,客户端(应用),浏览器的序列图如下:

 

 

其中:

  • ST:Service Ticket,用于客户端应用持有,每个ST对应一个用户在一个客户端上
  • TGT:Ticket Granting Ticket,存储在CAS服务器端和用户cookie两个地方

CAS服务器持有ST与TGT+客户端的映射关系,客户端持有ST与用户Session的映射关系,在renew的情况下,每次客户端根据用户Session将ST发送给CAS服务器端,服务器端检验ST是否存在即可知道此用户是否已登陆。在普通情况下,用户第一次登陆应用时,客户端将用户页面重定向到CAS服务器,服务器取出用户cookie中的TGT,检验是否在服务器中存在,若存在则生成ST返回给客户端 (若不存在则要求登陆,登陆成功后同样返回ST给客户端),客户端拿到ST后再发送给CAS服务器认证是否为真实ST,认证成功即表示登陆成功

我们可以看到,其实我们需要做的就是第2步中返回的登陆页面由服务器改放到客户端,然后让第3步中由用户在客户端上输入用户名密码但提交到CAS服务器端,登陆成功与失败都将转向客户端。

服务器详细登陆流程

对于上一节讲述的整体登陆流程,CAS 3.3.1服务器端上是依赖于Spring Webflow 1.0.3实现的,其主要流程在/WEB-INF/login-webflow.xml中配置,配置的页面流活动图如下(有删节):

 

 

 

图中命名均按照webflow配置文件中的命名,图解如下:

  • Action State图标表示webflow配置文件中的action-state或view-state节点
  • Decision图标表示webflow配置文件中的decision-state节点
  • Initial State图标表示webflow配置文件中的start-state节点
  • Final State图标表示webflow配置文件中的end-state节点

登陆的流程依照图上说明,在此不再累述,下面简单说明下CAS服务器端Spring Webflow的运作

首先CAS在/WEB-INF/web.xml中配置命名为cas的servlet以拦截输入请求,若不在cas servlet mapping范围内的资源路径请求均转向到/login上:

<servlet>
    <servlet-name>cas</servlet-name>
    <servlet-class>org.jasig.cas.web.init.SafeDispatcherServlet</servlet-class>
    <init-param>
        <param-name>publishContext</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>cas</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>
...
<!-- 其他cas servlet mapping -->

所有映射到cas servlet上的请求都将经过/WEB-INF/cas-servlet.xml检查确定进入哪个Action,cas-servlet.xml中最重要的两个bean就是handlerMappingB和handlerMappingC

handlerMappingB配置了登陆流程进入的路径映射,而handlerMappingC则配置了其他的流程的路径映射。/WEB-INF/login-webflow.xml流程配置文件即是在handlerMappingB中通过/login映射进入的。

Webflow依据一个生成的flowExecutionKey来确定一个流程实例走到了哪一步,每次页面流程运转总是需要提交这个flowExecutionKey来告诉webflow它是从流程的哪个位置出发的有了以上理论作为依据,我们在下一节就可以根据自己的需要修改流程,使之支持远程登录了

服务器登陆流程修改目标

修改后的登陆流程活动图如下:

图中橙色为我们修改的流程节点,这里我们增加了一个开始节点remoteLogin和一个结束节点
remoteCallbackView,删除了原有的loginFormView节点、 viewGenericLoginSuccess以及
renew节点(renew节点由于系统无此需求而删除),然后将所有这些节点的转向全部都转向
到remoteCallbackView节点,因为登陆和显示登陆成功信息都应该是客户端完成的

好了,原理到这里已经啰嗦完了,下一篇讲如何着手修改CAS服务器端啦

分享到:
评论
1 楼 记录成长 2012-03-01  
你用什么软件画的流程图呀?

相关推荐

    让CAS支持客户端自定义登陆页面——服务器篇[参考].pdf

    "CAS支持客户端自定义登陆页面——服务器篇" 为了让CAS支持客户端自定义登陆页面,需要在服务器端进行修改。首先,需要在/WEB-INF/web.xml文件中增加一个/remoteLogin的映射,以便将请求指向新的登陆页面。其次,...

    让CAS支持客户端自定义登陆页面——客户端篇

    标题中的“让CAS支持客户端自定义登陆页面——客户端篇”表明了本文主要探讨的是如何在中央认证服务(Central Authentication Service, CAS)系统中,允许客户端应用程序实现自定义登录页面的配置与实现。...

    让CAS支持客户端自定义登陆页面——服务器篇.docx

    ### 让CAS支持客户端自定义登录页面——服务器篇 #### 概述 本文档主要介绍如何在CAS(Central Authentication Service)系统中实现客户端自定义登录页面的功能,并且着重讲解服务器端的修改步骤与注意事项。CAS...

    让CAS支持客户端自定义登陆页面----服务器篇--.doc

    【让CAS支持客户端自定义登陆页面——服务器篇】 CAS(Central Authentication Service)是一个开源的身份验证框架,它允许用户通过单一登录(Single Sign-On, SSO)访问多个应用系统。在某些场景下,用户可能希望...

    CAS客户端开发配置及其所需求的最基本的jar文件

    在开发CAS客户端时,确保客户端正确配置并与CAS服务器通信至关重要,以解决“即将定向不安全的连接”这类问题。 首先,理解CAS的基本工作原理:用户尝试访问受保护的资源时,会被重定向到CAS服务器进行身份验证。...

    JASIG CAS 3 Learning Note 1 -- getting started

    **JASIG CAS 3 学习笔记 1 —— 开始之旅** JASIG CAS(Central Authentication Service)是一款开源的身份验证系统,广泛应用于多应用系统中的单点登录(Single Sign-On, SSO)。CAS 3 是其第三个主要版本,提供了...

    基于Java的源码-单点登录系统 JA-SIG CAS.zip

    在本案例中,我们讨论的是基于Java实现的单点登录系统——JA-SIG CAS。这个系统是开源的,由教育高级网(Ja-Sig)开发,旨在提供一种简单而有效的解决方案,为校园环境或企业环境中的各种应用实现安全的单点登录功能...

    cas server

    同时,它有丰富的插件和API,可以进行自定义扩展,例如支持额外的认证机制(如LDAP、数据库等)或者添加自定义的属性解析器。 8. **监控和日志**:为了确保CAS Server的正常运行,需要对其进行监控和日志记录。这...

    spring security2 安全手册(牛人写的)

    - **修改配置文件**:更新Spring Security配置以支持自定义登录页面。 - **登录页面中的参数配置**:设置登录表单所需的参数,如用户名和密码字段名称等。 - **测试一下**:验证自定义登录页面的功能是否正常工作。 ...

    spring security

    - **配置 Spring Security**: 配置客户端以支持 CAS SSO。 - **运行配置了 CAS 的子系统**: 验证 SSO 功能。 - **为 CAS 配置 SSL**: 保护 CAS 服务器通信的安全性。 ##### 12. Basic 认证 - **配置 basic 验证**:...

    PyPI 官网下载 | ftw.casauth-1.4.1.tar.gz

    1. CAS客户端支持:它实现了与CAS服务器的通信,包括票证验证、登录和登出操作。 2. 集成简单:该库易于集成到基于Python的Web应用程序中,如Flask和Django,通过提供中间件或装饰器,可以方便地添加CAS身份验证。 3...

    Windows应用程序开发入门到精通十二:将安全隐患扼杀在摇篮之中——.pptx

    此外,开发者还可以自定义身份验证机制,通过实现`System.Security.IIdentity`接口和使用`System.Security.GenericIdentity`类来管理用户凭证。例如,`WindowsIdentity.GetCurrent().Name`可以获取当前用户的Windows...

    SpringSecurity 3.0.1.RELEASE.CHM

    21.3. 配置CAS客户端 22. X.509认证 22.1. 概述 22.2. 把X.509认证添加到你的web系统中 22.3. 为tomcat配置SSL 23. 替换验证身份 23.1. 概述 23.2. 配置 A. 安全数据库表结构 A.1. User表 A.1.1. 组权限 ...

    MCTS .NET Framework 2.0 Windows Applications

    - **MCTS_70-526_SelfPacedTrainingKit_MS.Net Framework2.0 Windows-Based Client Development.pdf**:这份文档是针对MCTS认证考试70-526的自我学习培训材料,重点在于.NET Framework 2.0下的Windows客户端开发。...

    JAVA上百实例源码以及开源项目源代码

    多人聊天室 3个目标文件 第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本...

Global site tag (gtag.js) - Google Analytics