CAS 实现 SSO 单点登录

CAS 实现 SSO 单点登录_第1张图片

环境


cas-server-4.1.8,

cas-client-3.4.0,

Java-8,Maven-3,

Tomcat-7.0.72


CAS Server 安装


点此进入 CAS 下载列表,选择下载 cas-4.1.8.zip。


https://github.com/apereo/cas/releases


解压缩 cas-4.1.8.zip 并进入 cas-server-webapp 目录,在当前目录打开 cmd 并执行安装命令。


mvn -e -ff clean install -Dmaven.test.skip=true


经亲身测试(自己拉的电信12M网络),该安装过程非常漫长,主要因为镜像原因导致依赖包下载非常慢,此过程需静心等待。或直接下载我已经打好包的 cas.war 文件(注:该文件的依赖包版本有稍做修改,此不影响正常使用)。

安装完成后,在 cas-server-webapp/target 目录下可以看到 cas.war 文件,该文件便是 cas server 应用服务的 war 包。


cas server 安全认证是基于 https 的,这里使用 JDK 自带的 keytool 工具生成数字证书,生产环境系统的应用需要到证书提供商处购买证书。证书的生成及 Tomcat 的配置可参考文章:keytool 生成数字证书 – tomcat https 配置 。


https://fanlychie.github.io/post/java-keytool-tomcat-https.html


首先确保 Tomcat 的 https 可以正常访问,将 cas.war 文件拷贝到 apache-tomcat-7.0.72/webapps 下进行发布,启动 Tomcat,访问 https://www.fanlychie.com:8443/cas。


CAS 实现 SSO 单点登录_第2张图片

上图是用火狐浏览器打开的链接,选择高级 -> 添加例外 -> 确认安全例外。


CAS 实现 SSO 单点登录_第3张图片


用户名和密码在 apache-tomcat-7.0.72/webapps/cas/WEB-INF/deployerConfigContext.xml 配置文件中,找到并打开该文件,大概在 105 行


    class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">

   

       

           

       

   


可以看到默认的用户名是 casuser,密码是 Mellon。


CAS 实现 SSO 单点登录_第4张图片


看到上图的页面,表明 cas server 已经部署成功。


CAS Server 配置基于数据库用户认证


回到 cas-4.1.8.zip 解压缩的目录,并进入 cas-server-support-jdbc 目录,在当前目录打开 cmd 并执行安装命令


mvn -e -ff clean install -Dmaven.test.skip=true


安装完成后在 target 目录得到 cas-server-support-jdbc-4.1.8.jar 文件。


将该文件拷贝到 apache-tomcat-7.0.72/webapps/cas/WEB-INF/lib 目录下,并向此目录添加 c3p0-0.9.1.2.jar,mysql-connector-java-5.1.17.jar 两个文件。嫌麻烦的话,点此下载这三个 jar 包的压缩包文件。


http://pan.baidu.com/s/1pLIrdWn


再次打开 apache-tomcat-7.0.72/webapps/cas/WEB-INF/deployerConfigContext.xml 文件,大概在第 54 行。


   

       

           

           

           

           

           

       

   

   

   

   

       

   


按以上配置注销掉第二个 entry 并添加一个 entry。接着在后面添加两个 bean 配置。


   

   

   

   

   

   

   

   

   

   

   

   

   

   

    p:dataSource-ref="dataSource"

    p:sql="SELECT passwd FROM user WHERE name = ?" />


其中 cas_test_db 数据库中的 user 建表语句为


CREATE TABLE `user` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(255) NOT NULL,

  `passwd` varchar(255) NOT NULL,

  PRIMARY KEY (`id`)

)


重启 Tomcat,访问 https://www.fanlychie.com:8443/cas,用数据库中的 name/passwd 作为用户名和密码登录系统,若登录成功,表明配置已成功。


CAS Client 客户端使用和配置


使用 maven 创建两个 web 项目 cas-client1,cas-client2。点此下载 demo 文件。


cas-client1 项目 pom.xml 配置


   

        org.jasig.cas.client

        cas-client-core

        3.4.0

   

   

        org.slf4j

        slf4j-log4j12

        1.7.12

   

   

       

            org.apache.tomcat.maven

            tomcat7-maven-plugin

            2.2

           

                /

                8881

                8081

                UTF-8

                org.apache.coyote.http11.Http11NioProtocol

                false

                C:\Users\fanlychie\.keystore\selfissue.jks

                123654

                JKS

                http://localhost:8081/manager/html

           

       

   


首先必须确保项目 https 协议可以正常访问,否则 cas server 无法认证。


选中项目 -> Run As -> Maven build… -> tomcat7:run


访问 https://www.fanlychie.com:8081,若能访问到,表明 Tomcat 已准备好。


cas-client1 项目 web.xml 配置



   

        org.jasig.cas.client.session.SingleSignOutHttpSessionListener

   

 

   

        CAS Single Sign Out Filter

        org.jasig.cas.client.session.SingleSignOutFilter

       

            casServerUrlPrefix

           

            https://www.fanlychie.com:8443/cas

       

   

   

        CAS Single Sign Out Filter

        /*

   

 

   

        CAS Authentication Filter

        org.jasig.cas.client.authentication.AuthenticationFilter

       

            casServerLoginUrl

           

            https://www.fanlychie.com:8443/cas/login

       

       

            serverName

           

            https://www.fanlychie.com:8081

       

   

   

        CAS Authentication Filter

        /*

   

   

        CAS Validation Filter

        org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter

       

            casServerUrlPrefix

           

            https://www.fanlychie.com:8443/cas

       

       

            serverName

           

            https://www.fanlychie.com:8081

       

   

   

        CAS Validation Filter

        /*

   

   

        CAS HttpServletRequest Wrapper Filter

        org.jasig.cas.client.util.HttpServletRequestWrapperFilter

   

   

        CAS HttpServletRequest Wrapper Filter

        /*

   

   

        CAS Assertion Thread Local Filter

        org.jasig.cas.client.util.AssertionThreadLocalFilter

   

   

        CAS Assertion Thread Local Filter

        /*

   

   

        index.jsp

   


以上是 cas client 标准配置,具体信息可参考 https://github.com/apereo/java-cas-client。


cas-client2 配置基本与 cas-client1 配置相同,详情可见 demo,同时启动这两个项目


  • cas-client1 - https://www.fanlychie.com:8081

  • cas-client2 - https://www.fanlychie.com:8082


访问其中的一个项目 https://www.fanlychie.com:8081,会自动跳到


https://www.fanlychie.com:8443/cas/login?service=https%3A%2F%2Fwww.fanlychie.com%3A8081%2F。


CAS 实现 SSO 单点登录_第5张图片


由于还没有登录过 CAS 认证系统,CAS 认证系统拦截到你的访问,进入到认证系统登录界面,当登录成功后,CAS 服务会跳转向到你刚刚访问的地址。


CAS 实现 SSO 单点登录_第6张图片

当你访问 https://www.fanlychie.com:8082,此时是不需要登录了的。


CAS 实现 SSO 单点登录_第7张图片


至此,CAS 实现 SSO 单点登录系统搭建结束。


扩展阅读

扫码登录实现原理

单点登录原理与简单实现

单点登录终极方案之 CAS 应用及原理


来源:http://fanlychie.github.io/post/java-cas-server-client-configure.html

文章来源网络,版权归作者本人所有,如侵犯到原作者权益,请与我们联系删除

你可能感兴趣的:(CAS 实现 SSO 单点登录)