SSO CAS

一、单点登录与CAS协议

  1. SSO(概念)
    目前比较流行的企业业务整合的解决方案之一,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

  2. 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以上版本)

//复制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

<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中修改

p:cookieSecure="false"
p:cookieMaxAge="3600" <!-- cookie有效时间为3600s -->

(3) cas-WEB-INF-spring-configuration-warnCookieGenerator.xml中修改

p:cookieSecure="false"
p:cookieMaxAge="3600"

3.允许退出登录后重定向到其他页面(…?service=…)
cas-WEB-INF-spring-configuration-warnCookieGenerator.xml中修改

 <bean id="logoutAction" class="org.jasig.cas.web.flow.LogoutAction" p:servicesManager-ref="servicesManager" p:followServiceRedirects="${cas.logout.followServiceRedirects:true}"/>

三、代码实现——CAS Client端

导入相应的依赖:

<dependency>
    <groupId>net.unicon.cas</groupId>
    <artifactId>cas-client-autoconfig-support</artifactId>
    <version>1.4.0-GA</version>
</dependency>

application.properties配置:

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:

@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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值