CAS安装配置
CAS安装配置安装要求:Java >= 1.7Servlet容器支持servlet3.0Apache Maven >= 3.3安装步骤:1. 下载cas模板* Maven https://github.com/apereo/cas-overlay-template* Gradle https://github.com/apereo/cas-gradle-overlay
CAS安装配置
安装要求:
- Java >= 1.7
- Servlet容器支持servlet3.0
- Apache Maven >= 3.3
安装步骤:
1. 下载cas模板
* Maven https://github.com/apereo/cas-overlay-template
* Gradle https://github.com/apereo/cas-gradle-overlay-template
2. 进入模板中,查看readme.md文件。使用mvnw.bat clean package
进行build.
这里我把maven升到了3.3.9,但是执行的时候一直报错-Dmaven.multiModuleProjectDirectory system propery is not set,网上查到的解决办法是加上这个参数给vm,最初我在目录下面建立.jvm/jvm.config但是没有它没有读,后来就索性在bat脚本执行前加上了一个set JVM_CONFIG_MAVEN_PROPS="-Dmaven.multiModuleProjectDirectory=E:\software\apache\apache-maven-3.3.9"
命令,于是就可以进行maven build了。
3. 把生成的war放进tomcat或者eclipse中。这之前需要先启用tomcat的ssl连接.具体可参考
4. 访问https://localhost:8443/cas可以访问了,出现登陆页面.
接下来就是自定义配置CAS.
配置数据库验证.
首先我们需要使用数据库验证。当前我们使用的版本是4.2.5,属于4.x.x,所以默认使用的验证器是primaryAuthenticationHandler.根据官方文档来看,我们可以使用官方提供的三种,也可以选择自己写。我们选择自己手动写一个.
simpleUsernamePasswordAuthentication.java:package com.sut.cas.authentication.security.providers; import java.security.GeneralSecurityException; import javax.security.auth.login.FailedLoginException; import org.jasig.cas.authentication.HandlerResult; import org.jasig.cas.authentication.PreventedException; import org.jasig.cas.authentication.UsernamePasswordCredential; import org.jasig.cas.authentication.handler.support.AbstractUsernamePasswordAuthenticationHandler; import com.sut.service.UserService; /** * 使用数据库验证 * @author sut * @version $Revision:$ */ public class SimpleUsernamePasswordAuthentication extends AbstractUsernamePasswordAuthenticationHandler{ private UserService userService; /** * @see org.jasig.cas.authentication.handler.support.AbstractUsernamePasswordAuthenticationHandler#authenticateUsernamePasswordInternal(org.jasig.cas.authentication.UsernamePasswordCredential) */ @Override protected HandlerResult authenticateUsernamePasswordInternal(UsernamePasswordCredential transformedCredential) throws GeneralSecurityException, PreventedException { if(transformedCredential == null) throw new FailedLoginException("No user can be accepted because none is defined"); final String username = transformedCredential.getUsername(); final String encodedPassword = this.getPasswordEncoder().encode(transformedCredential.getPassword()); return doAuthenticate(transformedCredential, username, encodedPassword); } /** * @param credential * @param username * @param encodedPassword * @return * @throws FailedLoginException */ private HandlerResult doAuthenticate(UsernamePasswordCredential credential, String username, String encodedPassword) throws FailedLoginException{ if(! userService.login(username, encodedPassword)) throw new FailedLoginException("用户名或密码错误!"); return createHandlerResult(credential, this.principalFactory.createPrincipal(username), null); } public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; }
配置deployerConfigContext.xml
<bean id="simpleUsernamePasswordAuthentication" class="com.sut.cas.authentication.security.providers.SimpleUsernamePasswordAuthentication"> <!-- 我们要使用的自定义service --> <property name="userService" ref="userService" /> </bean> ... <!-- 自定义验证需要哪些 --> <util:map id="authenticationHandlersResolvers"> <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" /> <!-- <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" /> --> <entry key-ref="simpleUsernamePasswordAuthentication" value-ref="primaryPrincipalResolver" /> </util:map>
这样数据库验证就可以完成。要理解为什么这么做,这里涉及到具体的CAS SERVER验证的流程。
有一个博文讲的很清楚,觉得很好:
【SSO单点系列】(4):CAS4.0 SERVER登录后用户信息的返回
CAS Authentication(验证)
PrincipalNameTransformer
根据字面意思就是了,就是把login form得到的id和password,转换成以后特殊验证处理器可以使用的类型.
AuthenticationManager
这个验证Authentication Handler和验证策略,及验证结果的管理系统.
AuthenticationHander
AuthenticatioinHandler是一个具体验证处理器,产生三种结果:成功,失败,未验证.
PrincipalResolver
把authentication验证信息转换成security principal,通常包括元数据信息,比如用户详细信息,隶属关系,机构,邮件,名称等。
AuthenticationMetaDataPopulator
用来验证成功后设置元数据信息,通常用来设置protocol-specific数据.
Authentication Manager
这个manager可以设置多种验证策略,比如任一符合,全部符合。验证过程大概是验证,解析验证结果,解析元数据,验证是否符合security policy。
- AnyAuthenticationPolicy
符合任何验证即可 - AllAuthenticationPolicy
需要符合所有验证 - RequiredHandlerAuthenticationPolicy
符合所需要的验证即可。
Authentication Handler
支持多种通用的系统.还会受白名单和黑名单的影响
- Database
- JAAS
- LDAP
- OAuth 1.0/2.0, OpenID
- RADIUS
- SPNEGO (Windows)
- Trusted (REMOTE_USER)
- X.509 (client SSL certificate)
- Remote Address
- YubiKey
- Apache Shiro
- pac4j
Password Encoding
用来在验证时间中加密密码数据。
Argument Extractors
解析参数
CAS Security Guide简单介绍
Forced Authentication
对于某个服务,我们可能希望重新验证User。CAS支持这种服务,通过renew parameter设置。
Passive Authentication
这个认证是匿名验证,即使不登陆也可以访问的服务。通过gateway特性配置
Proxy Authentication
代理认证,主要用来当用户验证service不能直接和终端打交道的时候使用。但是有风险,并且破坏了几种性.
Multi-factor Authentication
多个元素验证,包括多个验证。比如地点、时间、level等.
Multi-factor Authentication
使用这个缓存登陆credients和reply给请求的request.
Service Management
service管理。用来指定配置需要哪些具体的sercurity sevice。
SSO Cookie Encryption
当用户登录成功的时候会给一个HTTP cookiee,默认是加密,可以通过cas.properties进行设置.
Ticket Expiration Policies
Ticket Expiration Polices是security service首要的一个策略。这个策略可以控制CAS SSO会话的一些行为:
* SSO session duration(失效)
* Ticket reuse
Single Sign-Out
单点登出
Login Throttling
登陆限制
Credential Encryption
credits加密
CAS Security Filter
这个是用来设置security request过滤器,在认证前进行过滤。 推荐使用。
Security Response Headers
自动加入的response header
Spring Webflow Sessions
CAS使用spring webflow来管理session,而这个webflow session的管理由客户端管理和追踪的。
User-Driven Security Features
一下为用户可以应用的自定义service
Long Term Authentication
长时间保持验证
Warn
用来设置warn,用户登录后到一个warnPage,大多数情况下可以用来显示,然后舍弃这个会话。
更多推荐
所有评论(0)