Professional Documents
Culture Documents
CAS认证
19.1. 概述
JA-SIG开发了一个企业级的单点登录系统,叫做CAS。
与其他项目不同,JA-SIG的中心认证服务是开源的,广泛使用的,简单理解的,不依赖平台的,而且支持代理能力。
Spring
Security完全支持CAS,提供一个简单的整合方式,把使用Spring
Security的单应用发布,转换成使用企业级CAS服务器的多应用发布安全
你可以从http://www.ja-sig.org/products/cas/找到CAS的更多信息。
你还需要访问这个网站下载CAS服务器文件。
19.2. CAS是如何工作的
虽然CAS网站包含了CAS的架构文档,我们这里还是说一下使用Spring
Security环境的一般性概述,。
Spring Security 2.0支持CAS 3。
在写文档的时候,CAS服务器的版本是3.2。
你要在公司内部安装CAS服务器。
CAS服务器就是一个WAR文件,所以安装服务器没有什么难的。
在WAR文件里,你需要自定义登录和其他单点登录展示给用户的页面。
发布CAS
3.2的时候,你也需要指定一个CAS的deployerConfigContext.xml里包含的AuthenticationHandler。
AuthenticationHandler有一个简单的方法,返回布尔值,判断给出的证书集合是否有效。
你的AuthenticationHandler实现会需要链接到后台认证资源类型里,像是LDAP服务器或数据库。
CAS自己也包含非常多AuthenticationHandler帮助实现这些。
在你下载发布服务器war文件的时候,它会把用户名和密码匹配的用户成功验证,这对测试很有用。
除了CAS服务器,其他关键角色当然是你企业发布的其他安全web应用。
这些web应用被叫做"services"。
这儿有两种服务:标准服务和代理服务。
代理服务可以代表用户,从其他服务中请求资源。
后面会进行更详细的介绍。
19.3. 配置CAS客户端
CAS的web应用端通过Spring
Security使用起来很简单。
我们假设你已经知道Spring
Security的基本用法,所以下面都没有涉及这些。
我们会假设使用基于命名空间配置的方法,并且添加了CAS需要的bean。
你需要添加一个 ServiceProperties
bean,到你的application context里。
这表现你的服务:
<bean id="serviceProperties" class="org.springframework.security.ui.cas.ServiceProperties">
<property name="service" value="https://localhost:8443/cas-sample/j_spring_cas_security_check"/>
<property name="sendRenew" value="false"/>
</bean>
这里的service必须是一个由CasProcessingFilter监控的URL。
这个sendRenew默认是false,但如果你的程序特别敏感就应该设置成true。
这个参数作用是,告诉CAS登录服务,一个单点登录没有到达。
否则,用户需要重新输入他们的用户名和密码,来获得访问服务的权限。
下面配置的bean就是展开CAS认证的过程:
<security:authentication-manager alias="authenticationManager"/>
<bean id="casProcessingFilterEntryPoint"
class="org.springframework.security.ui.cas.CasProcessingFilterEntryPoint">
<property name="loginUrl" value="https://localhost:9443/cas/login"/>
<property name="serviceProperties" ref="serviceProperties"/>
</bean>
应该使用
entry-point-ref选择驱动认证的CasProcessingFilterEntryPoint类。
CasProcessingFilter的属性与
AuthenticationProcessingFilter非常相似(在基于表单登录时用到)。
每个属性从字面上都很好理解。
注意我们也使用命名空间语法,为认证管理器设置一个别名,这样CasProcessingFilter需要它的一个引用。
为了CAS的操作,ExceptionTranslationFilter必须有它的authenticationEntryPoint,这里设置成CasProcessingFilterEntryPoint
bean。
CasProcessingFilterEntryPoint 必须指向
ServiceProperties bean
(上面讨论过了),它为企业CAS登录服务器提供URL。
这是用户浏览器将被重定向的位置。
下一步,你需要添加一个CasAuthenticationProvider
和它的合作伙伴:
<bean id="casAuthenticationProvider" class="org.springframework.security.providers.cas.CasAuthenticationProvider">
<security:custom-authentication-provider />
<property name="userDetailsService" ref="userService"/>
<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的认证,CasAuthenticationProvider
使用一个
UserDetailsService实例,来加载用户的认证信息。
这里我们展示一个简单的基于内存的设置。
如果你翻回头看一下"How CAS
Works"那节,这些beans都是从名字就可以看懂的。