SSO CAS
- 一、单点登录与CAS协议
- 二、搭建Tomcat-CAS——CAS Server端
- 三、代码实现——CAS Client端
一、单点登录与CAS协议
- SSO(概念) 目前比较流行的企业业务整合的解决方案之一,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
- CAS(实现) 定义:开源的企业级单点登录解决方案。 CAS框架:CAS(Central Authentication Service)是实现SSO单点登录的框架。 CAS Server为需要独立部署的Web应用;CAS Client支持非常多的客户端。
访问服务 -> 丁香认证 -> 用户认证 -> 发放票据 -> 验证票据 -> 传递用户信息
- 名次 Ticket Granting ticket(TGT):可以认为是CAS Server根据用户名密码生成的一张票,存在server端。 Ticket-granting cookie(TGC) :其实就是一个cookie,存放用户身份信息,由server发给client端。 Service ticket(ST):由TGT生成的一次性票据,用于验证,只能用一次。相当于server发给client一张票,然后client拿着这个票再来找server验证,看看是不是server签发的。
CAS过程 搭建方法
二、搭建Tomcat-CAS——CAS Server端
Step 1. 步骤一:配置Tomcat 下载Tomcat(建议8以上版本)
代码语言:javascript复制//复制war包进入web-apps,运行Tomcat
sudo sh startup.sh
sh shutdown.sh
1.修改端口号 (1) tomcat-config-service.xml中修改为9100(protocol=“HTTP/1.1”) (2) cas-WEB-INF-cas.properties中修改为9100(server.name=http://localhost:9100)
2.去除https认证(secure) 避开SSL证书,方便测试和编码过程。 (1) cas-WEB-INF-deployerConfigContext.xml中修改requireSecure
代码语言:javascript复制<bean id="proxyAuthenticationHandler" class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" p:requireSecure="false"/>
(2) cas-WEB-INF-spring-configuration-ticketGrantingTicketCookieGenerator.xml中修改
代码语言:javascript复制p:cookieSecure="false"
p:cookieMaxAge="3600" <!-- cookie有效时间为3600s -->
(3) cas-WEB-INF-spring-configuration-warnCookieGenerator.xml中修改
代码语言:javascript复制p:cookieSecure="false"
p:cookieMaxAge="3600"
3.允许退出登录后重定向到其他页面(…?service=…) cas-WEB-INF-spring-configuration-warnCookieGenerator.xml中修改
代码语言:javascript复制 <bean id="logoutAction" class="org.jasig.cas.web.flow.LogoutAction" p:servicesManager-ref="servicesManager" p:followServiceRedirects="${cas.logout.followServiceRedirects:true}"/>
三、代码实现——CAS Client端
导入相应的依赖:
代码语言:javascript复制<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>1.4.0-GA</version>
</dependency>
application.properties配置:
代码语言:javascript复制server.port=9001
cas.server-url-prefix=http://cas.server.com:8443/cas
cas.server-login-url=http://cas.server.com:8443/cas/login
cas.client-host-url=http://cas.client1.com:9001
cas.use-session=true
cas.validation-type=cas
#自定义的退出url,退出成功后跳转到 http://cas.client1.com:9001/logout/success
casClientLogoutUrl=http://cas.server.com:8443/cas/logout?service=http://cas.client1.com:9001/logout/success
Springboot 启动类添加标签@EnableCasClient
,启用CAS Client。
自定义Controller类,添加login和logout逻辑。
Config类需要配置忽略授权的URL:
代码语言:javascript复制@Configuration
public class CASConfig {
@Value("${cas.server-url-prefix}")
private String serverUrlPrefix;
@Value("${cas.server-login-url}")
private String serverLoginUrl;
@Value("${cas.client-host-url}")
private String clientHostUrl;
/**
* 授权过滤器,添加一个id为filterAuthenticationRegistration的bean标签
* @return
*/
@Bean
public FilterRegistrationBean filterAuthenticationRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new AuthenticationFilter());
// 设定匹配的路径
registration.addUrlPatterns("/*");
Map<String,String> initParameters = new HashMap<String, String>();
initParameters.put("casServerLoginUrl", serverUrlPrefix);
initParameters.put("serverName", clientHostUrl);
//忽略的url,"|"分隔多个url
initParameters.put("ignorePattern", "/logout/success|/index.html|.xml|/filename/*");
registration.setInitParameters(initParameters);
// 设定加载的顺序
registration.setOrder(1);
return registration;
}
}