CAS统一登录认证(3): CAS 客户端接入实践

13 篇文章 4 订阅
8 篇文章 4 订阅

                              CAS 客户端接入实践

一、接入准备

        为了实现Cas单点登录的接入与验证,我这里准备部署三个系统,一个是之前我们搭建的服务端,这个服务端完全是Cas提供的,还有两个是我们自己编写的并且引入的Cas 客户端的接入应用,具体情况如下表所示:

应用域名 端口系统描述来源url
CASServercas-server.com443中央认证服务官网下载http://cas-server.com:8080/cas/
CasClient1cas-client1.com8081接入系统1自行编写的demohttp://cas-client1.com:8081/CasClient1/
CasClient2cas-client2.com8082接入系统2自行编写的demohttp://cas-client1.com:8082/CasClient2/

接下来我们修改一下host文件,便于我们使用域名来访问系统,实现跨域的测试,host文件路径为:C:\Windows\System32\drivers\etc\host,配置的host文件内容如下:

127.0.0.1   cas-server.com
127.0.0.1   cas-client1.com
127.0.0.1   cas-client2.com

二、编写测试端程序

cas 官方demo:https://github.com/cas-projects/cas-sample-java-webapp

2.1 新增一个maven程序,并在pom.xml中添加Cas Client 依赖,依赖如下:

<dependency>
    <groupId>org.jasig.cas.client</groupId>
    <artifactId>cas-client-core</artifactId>
    <version>3.4.1</version>
</dependency>

2.2 在web.xml中添加Cas Client 的拦截过滤配置,配置如下:

<!-- 用于退出的fiflter -->
<filter>
    
    <filter-name>CAS Single Sign Out Filter</filter-name>
    <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
    <init-param>
        <param-name>casServerUrlPrefix</param-name>
        <param-value>http://cas-server.com:8080/cas</param-value>
    </init-param>
</filter>

<listener>
    <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>

<filter>
    <filter-name>CAS Authentication Filter</filter-name>
    <!--<filter-class>org.jasig.cas.client.authentication.Saml11AuthenticationFilter</filter-class>-->
    <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
    <init-param>
        <param-name>casServerLoginUrl</param-name>
        <param-value>http://cas-server.com:8080/cas/login</param-value>
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>http://cas-client1.com:8081</param-value>
    </init-param>
</filter>

<!-- 这个是对st票据的校验,其实cas中也就是通过这种方式来确定是否是同一个人 -->
<filter>
    <filter-name>CAS Validation Filter</filter-name>
    <!--<filter-class>org.jasig.cas.client.validation.Saml11TicketValidationFilter</filter-class>-->
    <filter-class>org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter</filter-class>
    <init-param>
        <param-name>casServerUrlPrefix</param-name>
        <param-value>http://cas-server.com:8080/cas</param-value>
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>http://cas-client1.com:8081</param-value>
    </init-param>
    <init-param>
        <param-name>redirectAfterValidation</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>useSession</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>authn_method</param-name>
        <param-value>mfa-duo</param-value>
    </init-param>
</filter>

<filter>
    <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
    <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>CAS Single Sign Out Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>CAS Validation Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>CAS Authentication Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

2.3 按照上述两个步骤,创建CasClient2。

2.4 新增出来的CasClient1和CasClient2如下所示:

2.5 将CasClient1部署在端口为8081的tomcat上,将CasClient2部署在端口为8082的tomcat上,启动两个项目。

三、单点登录测试

        启动Cas Server,访问CasClient1,发现显示未授权,情况如下图所示:

这是因为我们没有配置好哪些服务可以接入并使用我们的sso进行鉴权,打开Cas Server中的resources/services文件夹下面的  HTTPSandIMAPS-10000001.json,发现只配置了https、|imaps但是没有http,而我们使用的是http协议,解决办法:添加http协议。

   

然后在配置文件application.properties下添加配置:

##
# Service Registry(服务注册)
#
# 开启识别Json文件,默认false
cas.serviceRegistry.initFromJson=true 
# 保存tgc
cas.tgc.secure=false
tgc.name=TGC

重新启动之后,再次访问http://cas-client1.com:8081/CasClient1/,自动重定向到cas登录页面,注意这里的URL,变成了http://cas-server.com/cas/login?service=http%3A%2F%2Fcas-client1.com%3A8081%2FCasClient1%2F,页面如下:

输入账号密码(casuser/Mellon)登录,即可认证通过成功访问CasClient1的页面: 


然后访问http://cas-client2.com:8082/CasClient2/,不会重定向到登录页面,直接到CasClient2的页面: 


访问cas认证中心http://cas-server.com:8080/cas/,也是直接到登录成功的页面: 


如果要单点注销登录,直接访问http://cas-server.com:8080/cas/logout


单点登录功能整合完成了。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值