CAS之改造

cas改造

关键字:

sso域名:passport.xiw.com

登陆地址(spring web flow):http://www.xiw.com/site/login

登陆地址(直接):https://passport.xiw.com/login?locale=zh_CN

退出地址:https://passport.xiw.com/logout

一、涉及模块

svn地址:


cas-client-core


http://svnxiw.xiw.com/Userend/passport/cas_client/cas-client-core


cas-server-core


http://svnxiw.xiw.com/Userend/passport/cas-server-3.5.2/cas-server-core


cas-server-webapp


http://svnxiw.xiw.com/Userend/passport/cas-server-3.5.2/cas-server-webapp


cas-server-support-jdbc


http://svnxiw.xiw.com/Userend/passport/cas-server-3.5.2/cas-server-support-jdbc

二、CAS 服务端的处理逻辑

CAS 服务端总共对外定义了9 个接口,客户端通过访问这9 个接口与服务端交互,这9个接口为:


接口


说明


备注


/login


认证接口


/logout


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


/captcha.htm(新增)


验证码认证功能接口


captchaImageCreateController


/registerAutoLogin(新增)


注册自动登录跳转接口


registerAutoLoginController

详细说明:

 /login:

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

注:

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 ImageVaditeAuthenticationViaFormAction的 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 的认证成功页面。

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

处理逻辑:

  1. 1) removeCookie
  2. 2) 在服务端删除TicketGrantingTicket 对象(此对象封装了cookie 的value 值)
  3. 3 )redirect 到退出页面,有2 种选择:
  4. if(LogoutController 的followServiceRedirects 属性为true 值,且url 里的service 参数非空){
  5. redirect 到 sevice 参数标识的url
  6. }
  7. else{
  8. redirect 到内置的casLogoutView (cas/WEB-INF/view/jsp/default/ui/casLogoutView.jsp ),如果url 里有url 参数,则此url 参数标识的链接会显示在casLogoutView 页面上。
  9. }
  10. /registerAutoLogin: ( 对应实现类 org.jasig.cas.web.RegisterAutoLoginController )

三、认证相关的概念及流程

概念

  1. Credentials 用户提供的用于登录用的凭据信息,如用户名/ 密码、证书、IP 地址、Cookie 值等。比如 UsernamePasswordCredentials ,封装的是用户名和密码。CAS 进行认证的第一步,就是把从UI 或request 对象里取到的用户凭据封装成Credentials 对象,然后交给认证管理器去认证。
  2. AuthenticationHandler 认证Handler, 每种AuthenticationHandler 只能处理一种
  3. Credentials ,如AbstractUsernamePasswordAuthenticationHandler 只负责处
  4. 理 U sernamePasswordCredentials 。
  5. Principal 封装用户标识,比如 SimplePrincipal, 只是封装了用户名。认证成功
  6. 后, credentialsToPrincipalResolvers 负责由Credentials 生成 Principal 对象。
  7. CredentialsToPrincipalResolvers 负责由 Credentials 生成 Principal 对象,每
  8. 种 CredentialsToPrincipalResolvers 只处理 一种Credentials ,
  9. 比如 UsernamePasswordCredentialsToPrincipalResolver 负责
  10. 从 U sernamePasswordCredentials 中取出用户名,然后将其赋给生成
  11. 的 SimplePrincipal 的 ID 属性。
  12. AuthenticationMetaDataPopulators 负责将 Credentials 的一些属性赋值
  13. 给 Authentication 的 attributes 属性。
  14. Authentication Authentication是认证管理器的最终处理结果, Authentication 封装
  15. 了 Principal ,认证时间,及其他一些属性(可能来自 Credentials )。
  16. AuthenticationManager 认证管理器得到 Credentials 对象后,负责调度
  17. AuthenticationHandler 去完成认证工作,最后返回的结果是 Authentication 对象。
  18. CentralAuthenticationService CAS 的服务类,对 Web 层提供了一些方法。该类还负责调用 AuthenticationManager 完成认证逻辑。


login-webflow.xml 

  1. <!-- 验证码服务 simon 2013-10-26 修改这个 -->
  2. <view-state id="viewLoginForm" view="loginxiw" model="credentials">
  3. <binder>
  4. <binding property="username"/>
  5. <binding property="password"/>
  6. <binding property="code"/>
  7. </binder>
  8. <on-entry>
  9. <set name="viewScope.commandName" value="‘credentials‘"/>
  10. </on-entry>
  11. <transition to="realSubmit" on="submit" validate="true" bind="true">
  12. <evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)"/>
  13. </transition>
  14. </view-state>
  15. <!-- 验证码服务 simon 2013-10-26 替换这个 -->
  16. <var name="credentials" class="org.jasig.cas.authentication.principal.CaptchaImageLoginCredentials" />

deployerConfigContext.xml

  1. <!--修改数据库验证 simon 2013-10-26-->
  2. <bean class="org.jasig.cas.adaptors.jdbc.PassportxiwQueryDatabaseAuthenticationHandler">
  3. <property name="dataSource" ref="springDataSource"/>
  4. <property name="sql"
  5. value="select password from UserLogin where lower(userName) = lower(?) and isLock=0" />
  6. <property name="passwordEncoder" ref="md5PasswordEncoder" />
  7. <property name="updateSql" value="update UserLogin set lastLoginIP=?,lastLoginTime=? where lower(userName) = lower(?)" />
  8. </bean>
  9. <!-- 修改数据库验证 simon 2013-10-26-->
  10. <bean id="springDataSource"
  11. class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  12. <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
  13. <property name="url" value="jdbc:mysql://dbip/wxiw"></property>
  14. <property name="username" value="root"></property>
  15. <property name="password" value="root"></property>
  16. </bean>
  17. <bean id="myPasswordEncoder"
  18. class="org.jasig.cas.authentication.handler.PlainTextPasswordEncoder" />
  19. <bean id="md5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
  20. <constructor-arg index="0" value="MD5" />
  21. </bean>
  22. <bean
  23. class="org.jasig.cas.authentication.principal.CaptchaImageLoginCredentialsToPrincipalResolver">
  24. <property name="attributeRepository" ref="attributeRepository" />
  25. </bean>

Web.xml

  1. <!-- 验证码服务 simon 2013-10-26 validate code-->
  2. <servlet-mapping>
  3. <servlet-name>cas</servlet-name>
  4. <url-pattern>/captcha.htm</url-pattern>
  5. </servlet-mapping>
  6. <!-- 注册自动登录 xiw 2014/7/23-->
  7. <servlet-mapping>
  8. <servlet-name>cas</servlet-name>
  9. <url-pattern>/registerAutoLogin</url-pattern>
  10. </servlet-mapping>

来源: <https://tower.im/projects/76c15260e1e84919bee3f18c2e41f1b6/docs/0816f172fcfb4b9ab259aaf7fc164024/>

来自为知笔记(Wiz)

时间: 2024-08-11 01:34:24

CAS之改造的相关文章

SSO单点登录在互联网电商应用中的解决方案(基于CAS的改造)

电商平台中无论是前端还是后端会存在大量的业务应用,在整个交易的过程中请求是在各个业务应用中流转的,对于用户来讲只需要登录一次就可以访问所有的业务,这就是单点登录SSO. 单点登录开源有很多的解决方案,比如基于session的SSO和基于cookie的SSO. 业界使用比较多的基于session的SSO的开源解决方案比如CAS,流程示意图如下: 这里不去详细说明流程,读者可以参考其他资料的说明 基于cookie的SSO在原理上和上面的差不多,区别是把用户设置到cookie中作为token的一部分进

单点登录CAS使用记(八):使用maven的overlay实现无侵入的改造CAS

编写中 单点登录CAS使用记系列: 单点登录CAS使用记(一):前期准备以及为CAS-Server配置SSL协议 单点登录CAS使用记(二):部署CAS服务器以及客户端 单点登录CAS使用记(三):实现自定义验证用户登录 单点登录CAS使用记(四):为登录页面加上验证码 单点登录CAS使用记(五):cas-client不拦截静态资源以及无需登录的请求. 单点登录CAS使用记(六):单点登出.单点注销 单点登录CAS使用记(七):关于服务器超时以及客户端超时的分析 单点登录CAS使用记(八):使用

CAS进行https到http的改造方案

先说具体的改造方案: 服务端: 一.CAS Server端的修改 1.找到cas\WEB-INF\deployerConfigContext.xml 对以下Bean增加参数p:requireSecure="false",该参数表示是否需要安全验证,即HTTPS,false为不采用,加上去之后如下: <!-- Required for proxy ticket mechanism. --> <bean id="proxyAuthenticationHandle

CRISPR–Cas系统,基因组改造新技术

zz: http://blog.sciencenet.cn/blog-614672-689702.html 有一种细菌编码的酶能够利用向导RNA(guide RNA)分子对特定的DNA片段进行定向切割,科学家们利用这种特点开发出了一种能够对基因组进行特异性定点改造的工具,对细胞乃至整个生物体进行基因组改造.目前已经利用这种技术对细菌.人体细胞以及斑马鱼进行过成功的遗传学改造工作. 日本大阪大学(Osaka University)的科研人员们曾经在1987年发表过一篇论文,不过这篇论文在当时并没有

cas改造随笔

原http://www.cnblogs.com/hellowood/archive/2010/08/05/1793364.html 键字: sso域名:cas.server.com 登陆地址(spring web flow):https://cas.server.com/cas/login 登陆地址(直接):https://cas.server.com/cas/directLogin 退出地址:https://cas.server.com/cas/logout 语言参数:locale=zh_CN

cas sso单点登录系列4_cas-server登录页面自定义修改过程(jsp页面修改)

转:http://blog.csdn.net/ae6623/article/details/8861065 SSO单点登录系列4:cas-server登录页面自定义修改过程,全新DIY. 目标: 下面是正文: 打开cas的默认首页,映入眼帘的是满眼的中文and英文混杂体,作为一名合格的用户,我表示很不开心. 于是,打开 Nodepad++,寻找C:\tomcat7\webapps\casServer\WEB-INF\view\jsp\default\ui \casLoginView.jsp这个页

CRISPR/Cas基因编辑技术最新研究进展

CRISPR/Cas系统是目前发现存在于大多数细菌与所有的古菌中的一种后天免疫系统,其以消灭外来的质体或者噬菌体并在自身基因组中留下外来基因片段作为“记忆”. CRISPR/Cas 系统全名为常间回文重复序列丛集/常间回文重复序列丛集关联蛋白系统(clustered regularly interspaced short palindromic repeats/CRISPR-associated proteins).目前已发现三种不同类型的 CRISPR/Cas系统,存在于大约40%和90%已测

Java并发框架——AQS阻塞队列管理(三)——CLH锁改造

在CLH锁核心思想的影响下,Java并发包的基础框架AQS以CLH锁作为基础而设计,其中主要是考虑到CLH锁更容易实现取消与超时功能.比起原来的CLH锁已经做了很大的改造,主要从两方面进行了改造:节点的结构与节点等待机制.在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁.入队列.释放锁等实现都与头尾节点相关,并且每个节点都引入前驱节点和后后续节点的引用:在等待机制上由原来的自旋改成阻塞唤醒.如图2-5-9-4,通过前驱后续节点的引用一节节连接起来形成一个链表队列,对于头尾节点的

[转]统一身份认证(CAS)简单说明与设计方案

统一身份认证(CAS)简单说明与设计方案(转) 1. 单点登录概述 所谓单点登录(SSO),只当企业用户同时访问多个不同(类型的)应用时,他们只需要提供自身的用户凭证信息(比如用户名/密码)一次,仅仅一次.SSO解决方案(比如,CAS)负责统一认证用户,如果需要,SSO也可以完成用户的授权处理.可以看出,当企业用户在不同的应用间切换时,他们不用再重复地输入自身的用户凭证了.在实施SSO后,所用的认证操作都将交给SSO认证中心.现有的SSO解决方案非常多,比如微软的MSN Passport便是典型