03单点登录CAS5.3.4集成客户端

参照网址
参照网址
server代码地址
client1代码地址
client2代码地址

之前一直是server端登录验证。所谓单点登录(SSO),只当企业用户同时访问多个不同(类型的)应用时,他们只需要提供自身的用户凭证信息(比如用户名/密码)一次,当用户在不同的应用间切换时,他们不用再重复地输入自身的用户凭证了。所以此章写一下cas如何整合客户端

1.配置Host

#cas服务端
127.0.0.1 server.guangyuanbj.com
#客户端1
127.0.0.1 client1.guangyuanbj.com
#客户端2
127.0.0.1 client2.guangyuanbj.com

2.cas服务端授权客户端

2.1 在cas-server-base的resources下新建文件夹services,新建配置文件web-10000001.json
{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^(https|imaps|http)://.*",
  "name" : "web",
  "id" : 10000001,
  "description" : "所有的https或者http访问都允许通过",
  "evaluationOrder" : 100
}

03单点登录CAS5.3.4集成客户端_第1张图片

注意:services目录中可包含多个JSON文件,其命名必须满足以下规则: n a m e − {name}- name{id}.json,id必须为json文件中内容id一致。

  • 对其中属性的说明如下,更多详细内容见官方文档-Service-Management。
    • @class:必须为org.apereo.cas.services.RegisteredService的实现类
    • serviceId:对服务进行描述的表达式,可用于匹配一个或多个 URL 地址
    • name: 服务名称
    • id:全局唯一标志
    • description:服务描述,会显示在默认登录页
    • evaluationOrder:定义多个服务的执行顺序
因为在CAS服务中,默认是提供了默认的Service配置项,所以如果添加的Json配置没起作用,可以尝试注释掉默认启动Json,在pom.xml文件里面进行配置,如下:

    org.apache.maven.plugins
    maven-war-plugin
    2.6
    
        cas
        false
        false
        
            false
            ${project.build.directory}/war/work/org.apereo.cas/cas-server-webapp${app.server}/META-INF/MANIFEST.MF
            
        
        
            
                org.apereo.cas
                cas-server-webapp${app.server}
            
        
        
           
            **/services/*.json
        
    

2.2 配置好service之后,根据官方文档-service-registry,还需修改 application.properties 文件告知 CAS 服务端从本地加载服务定义services文件
#注册客户端
# 开启识别Json文件,默认false
cas.serviceRegistry.initFromJson=true
#自动扫描服务配置,默认开启
cas.serviceRegistry.watcherEnabled=true
#120秒扫描一遍
cas.serviceRegistry.schedule.repeatInterval=120000
#延迟15秒开启
cas.serviceRegistry.schedule.startDelay=15000
# Json配置
cas.serviceRegistry.json.location=classpath:/services

cas.serviceRegistry.managementType=DEFAULT
cas.logout.followServiceRedirects=true
2.3 添加pom


    org.apereo.cas
    cas-server-support-json-service-registry
    ${cas.version}

至此 cas server端配置完成

3.客户端配置

3.1 搭建客户端

下载官方提供的CAS Java客户端,cas-sample-java-webapp

3.2 修改pom.xml文件



    org.apache.tomcat.maven
    tomcat7-maven-plugin
    2.2
    
        8081
        UTF-8
        tomcat7
        /
    

将自带的jetty插件注释

3.3 修改web.xml 让客户端与服务端关联起来

客户端2的配置类似,只要将其中的http://client1.guangyuanbj.com:8081修改为http://client2.guangyuanbj.com:8082






    cas-app
    
    
    
        org.jasig.cas.client.session.SingleSignOutHttpSessionListener
    

    
    
        CAS Single Sign Out Filter
        org.jasig.cas.client.session.SingleSignOutFilter
        
            casServerUrlPrefix
            https://server.guangyuanbj.com:8443/cas
        
    
    
        CAS Single Sign Out Filter
        /*
    

    
    
        CAS Filter
        org.jasig.cas.client.authentication.AuthenticationFilter
        
            casServerLoginUrl
            https://server.guangyuanbj.com:8443/cas/login
            
        
        
            serverName
            http://client1.guangyuanbj.com:8081
            
        
    
    
        CAS Filter
        /*
    
    
    
    
        CAS Validation Filter
        org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter
        
            casServerUrlPrefix
            https://server.guangyuanbj.com:8443/cas
            
        
        
            serverName
            http://client1.guangyuanbj.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
        /*
    





3.4 修改登录后index.jsp标记登录的系统是哪个系统,用于区分客户端1.客户端2

当前为客户端2

客户端1

客户端2

3.5 启动测试

浏览器输入http://client1.guangyuanbj.com:8081会调转到https://server.guangyuanbj.com:8443/cas/login页面,但是重定向回client1时报证书找不到
03单点登录CAS5.3.4集成客户端_第2张图片

该问题网上都说是客户端jdk未导入证书导致的,但是我服务端和客户端是在同一台电脑上配置的,之前jdk就导入了证书
一直没有找到原因,很纳闷哪里有问题呀

因公司也只是局域网使用单点登录,所以暂时考虑去掉SSL步骤如下:
参考网址

1、服务端的Tomcat改回普通的http Connector访问,比如用原来的8080端口配置方式。
2、建议从客户端jre的证书仓库中删掉之前为做HTTPS单点登录加的那个证书:
keytool -delete -alias cas -keystore  C:/Java/jdk1.8.0_91/jre/lib/security/cacerts
做完这两步还不够,你会发现每个客户端的访问虽然都需要登录服务端,但是彼此的登录状态是不互通的。所以还有第三步
3、在application.properties里加上这么一句:
cas.tgc.secure=false
如果登录状态还是不互通,请清空浏览器的cookie,重开浏览器试试。 

你可能感兴趣的:(05.单点登录CAS)