CAS Spring 中文文档

原文链接

Spring官方文档

译文

32.CAS鉴权

32.1 概述

JA-SIG 搞了一个 企业范围内的单点登录系统:就是闻名天下的CAS。跟其他替代品不一样的地方在于,JA-SIG的中心鉴权服务是开源的,被广泛是用的,容易理解的,独立于平台的,支持代理能力的。Spring的安全模块完全支持CAS,并提供了比较容易的迁移方案,从单应用部署(Spring Security)到多应用部署(企业层CAS server)

可以从这个网址了解CAS。你也需要访问这个网址来下载CAS服务器文件。

32.2 CAS是怎么工作的呢?

尽管官网提供了CAS架构的细节,我们还是在Spring Security的上下文语境下再来亿遍。Spring Security 3.x 支持 CAS 3。

在你的企业内部某个地方你需要搞一个CAS server。CAS server就是一个简单的标准的WAR文件,所以安装配置这个server肯定是没啥困难的。在WAR文件里你会自定义一些展示给用户的单点登录页面。

当我们部署CAS3.4服务器,你会需要在deployerConfigContext.xml指定AuthenticationHandler。这个AuthenticationHandler有一个简单的方法,返回boolean,说明这个证书是否有效。你的AuthenticationHandler实现需要连接某种后端存储,比如LDAP服务器或者数据库。CAS本身包含了好几种AuthenticationHandler,开箱即用。当你下载并部署服务器war文件,他就已经成功设定好了,匹配用户名和密码。

除了CAS服务器本身,其他关键的玩家,当然是安全web应用。这些web应用就是”服务“。有三种类型的服务。那些验证服务ticket的、那些获取代理ticket的、那些校验代理ticket的。校验代理ticket会不一样,因为一堆代理必须被校验,而且经常代理ticket可以复用。

32.2.1 Spring Security和 CAS交互顺序

web server、CAS server、Spring安全服务的基本的交互如下:

  • 用户浏览服务的公告页面,不涉及CAS或者Spring Security
  • 用户访问了一个安全相关的页面。Spring Security的ExceptionTranslationFilter会 检测到AccessDeniedException或者AuthenticationException
  • 因为用户的Authentication引发了AuthenticationExceptionExceptionTranslationFilter会调用配置好的AuthenticationEntryPoint。如果使用CAS,就会是这个类:CasAuthenticationEntryPoint
  • CasAuthenticationEntryPoint会重定向用户的浏览器到CAS服务器,指定一个参数:service,也就是回调url(指向原来要访问的应用)。比如: https://my.company.com/cas/login?service=https%3A%2F%2Fserver3.company.com%2Fwebapp%2Flogin/cas.
  • 用户浏览器重定向到CAS,输入用户名和密码,如果用户有一个session cookie指明他们之前已经登陆了,他们就不需要再登陆了。CAS会使用PasswordHandler(如果是CAS3.0的话则是AuthenticationHandler),校验用户名和密码
  • 如果成功登陆了,CAS重定向用户的浏览器到原来的服务。这里面还会有一个ticket参数,举个例子:https://server3.company.com/webapp/login/cas?ticket=ST-0-ER94xMJmn6pha35CQRoZ.
  • 回到我们的服务,CasAuthenticationFilter会一直监听login/cas的请求。这个filter会构造UsernamePasswordAuthentictionToken,代表服务ticket。
  • 省略一些中间步骤。。。。。。。。
  • TicketValidator发起HTTPs请求给CAS服务器,校验服务ticket。举例:https://my.company.com/cas/proxyValidate?service=https%3A%2F%2Fserver3.company.com%2Fwebapp%2Flogin/cas&ticket=ST-0-ER94xMJmn6pha35CQRoZ&pgtUrl=https://server3.company.com/webapp/login/cas/proxyreceptor.
  • 回到CAS server,校验ticket。
  • 最后重定向回到原来访问的页面

32.3 CAS客户端的配置

32.3.1 服务ticket 校验

添加一个ServiceProperties bean,指定CAS 服务

<bean id="serviceProperties"
	class="org.springframework.security.cas.ServiceProperties">
<property name="service"
	value="https://localhost:8443/cas-sample/login/cas"/>
<property name="sendRenew" value="false"/>
</bean>

再加上以下的beans

<security:http entry-point-ref="casEntryPoint">
...
<security:custom-filter position="CAS_FILTER" ref="casFilter" />
</security:http>

<bean id="casFilter"
	class="org.springframework.security.cas.web.CasAuthenticationFilter">
<property name="authenticationManager" ref="authenticationManager"/>
</bean>

<bean id="casEntryPoint"
	class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
<property name="loginUrl" value="https://localhost:9443/cas/login"/>
<property name="serviceProperties" ref="serviceProperties"/>
</bean>

配置CASAuthenticationProvider和他的合作者

<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="casAuthenticationProvider" />
</security:authentication-manager>

<bean id="casAuthenticationProvider"
	class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
<property name="authenticationUserDetailsService">
	<bean class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
	<constructor-arg ref="userService" />
	</bean>
</property>
<property name="serviceProperties" ref="serviceProperties" />
<property name="ticketValidator">
	<bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
	<constructor-arg index="0" value="https://localhost:9443/cas" />
	</bean>
</property>
<property name="key" value="an_id_for_this_auth_provider_only"/>
</bean>

<security:user-service id="userService">
<security:user name="joe" password="joe" authorities="ROLE_USER" />
...
</security:user-service>

以上就是CAS的最基础的配置。如果没啥事务,你的应用程序就可以开心地跑起来了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud集成CAS单点登录的流程大致如下: 1. 配置CAS服务端 首先需要搭建一个CAS服务端,配置好CAS的登录页面、认证策略、用户信息源等。具体的配置可以参考CAS官方文档。 2. 集成CAS客户端 在Spring Cloud应用中,需要添加CAS客户端的依赖包,例如: ``` <dependency> <groupId>org.jasig.cas.client</groupId> <artifactId>cas-client-core</artifactId> <version>3.6.2</version> </dependency> ``` 在Spring Boot应用中,可以通过配置文件来配置CAS客户端,例如: ``` cas.server-url-prefix=https://cas.server.com/ cas.server-login-url=https://cas.server.com/login cas.client-host-url=https://app.client.com/ ``` 其中,`cas.server-url-prefix`为CAS服务端的URL前缀,`cas.server-login-url`为CAS服务端的登录页面URL,`cas.client-host-url`为当前应用的URL。 3. 集成Spring Security 在Spring Cloud应用中,可以使用Spring Security框架来实现安全认证和授权功能。需要在配置文件中添加Spring Security的配置,例如: ``` spring.security.user.name=user spring.security.user.password=password ``` 这里指定了一个默认的用户名和密码。 4. 配置过滤器 最后需要配置CAS客户端的过滤器,用于拦截CAS服务端的认证请求和响应。在Spring Cloud应用中,可以使用`CasAuthenticationFilter`和`CasAuthenticationEntryPoint`两个过滤器来实现CAS单点登录功能。具体的配置可以参考CAS官方文档。 完成以上步骤后,就可以通过CAS服务端来实现Spring Cloud应用的单点登录功能了。用户只需要在CAS服务端登录一次,就可以访问多个Spring Cloud应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值