资讯专栏INFORMATION COLUMN

CAS 5.2.x 单点登录 - 搭建服务端和客户端

Lin_YT / 2700人阅读

摘要:一简介单点登录,简称为,是目前比较流行的企业业务整合的解决方案之一。客户端拦截未认证的用户请求,并重定向至服务端,由服务端对用户身份进行统一认证。三搭建客户端在官方文档中提供了客户端样例,即。

一、简介
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

CAS 是一个开源的企业级单点登录系统,目前最新版本为 5.2.x。
CAS 包含两个部分:CAS Server 和 CAS Client,它们之间独立部署。CAS 客户端拦截未认证的用户请求,并重定向至 CAS 服务端,由 CAS 服务端对用户身份进行统一认证。

二、搭建服务端

对于本地搭建 CAS 服务端,官方提供了基于 Maven 和 Gradle 的 Overlay 构建方式,本文用的是 CAS Maven WAR Overlay。

2.1 什么是 WAR Overlay?
Overlay 技术可以把多个项目 war 合并成为一个项目,如果项目存在同名文件,那么主项目中的文件将覆盖掉其他项目的同名文件。

使用 Overlay 无需对 CAS 源码进行编译,也避免了对 CAS 源码进行侵入性改造。

2.2 环境清单

JDK 1.8

Tomcat 8.0+

IntelliJ IDEA 2017.2

2.3 Overlay 构建

下载 CAS Maven WAR Overlay,修改 pom.xml ,设置 CAS 版本为 5.2.2。建议去除掉 pom.xml 文件中的 wrapper-maven-plugin 和无用的 profile 配置。


    5.2.2

首次导入 IDEA,可以看到后台正在下载官方 cas.war。

工程 overlays 目录下的文件是由 maven 编译后才产生的,可以在 pom.xml 中配置官方 cas.war 中的文件的那些文件可以排除,不要在 overlays 中生成:


    org.apache.maven.plugins
    maven-war-plugin
    2.6
    
        cas
        false
        false
        
            false
            ${manifestFileToUse}
        
        
            
                org.apereo.cas
                cas-server-webapp${app.server}
                
                
                    WEB-INF/classes/services/*
                    WEB-INF/classes/application.*
                
            
        
    

打开 Project Structure,可以观察到该工程具有两个 Web Root,但是 src/main/webapp 目录并不存在,需要进行手动创建。

拷贝 overlays 目录下的 application.properties 配置文件至 resources 目录,用于覆盖 CAS WAR 中的同名文件。最终工程目录结构如下:

为工程配置 tomcat 8.0 并启动,注意 CAS 5.2.x 不支持低于 tomcat 8.0 的版本。
看到控制台打印 READY 表明启动成功。

访问 http://localhost:8080/cas/login 进入登录界面。

其中Non-secure Connection提示需要配置 SSL,Static Authentication提示需要对用户配置进行修改,可以修改为 JDBC、REST 等方式。目前用户配置写死在 application.properties 配置文件中,用户名为 casuser,密码为 Mellon。

##
# CAS Authentication Credentials
#
cas.authn.accept.users=casuser::Mellon
2.4 Services配置

客户端接入 CAS 首先需要在服务端进行注册,否则客户端访问将提示“未认证授权的服务”警告:

在 resources 文件夹下创建 services 文件夹进行服务定义,该目录中可包含多个 JSON 文件,其命名必须满足以下规则:

JSON fileName = serviceName + "-" + serviceNumericId + ".json"

创建 services/Localhost-10000003.json 文件,表示允许所有以 http://localhost 开头的认证请求:

{
  "@class": "org.apereo.cas.services.RegexRegisteredService",
  "serviceId": "^(http)://localhost.*",
  "name": "本地服务",
  "id": 10000003,
  "description": "这是一个本地允许的服务,通过localhost访问都允许通过",
  "evaluationOrder": 1
}

对其中属性的说明如下,更多详细内容见官方文档-Service-Management。

@class:必须为org.apereo.cas.services.RegisteredService的实现类

serviceId:对服务进行描述的表达式,可用于匹配一个或多个 URL 地址

name: 服务名称

id:全局唯一标志

evaluationOrder:定义多个服务的执行顺序

最后,根据官方文档-service-registry,还需修改 application.properties 文件告知 CAS 服务端从本地加载服务定义文件:

#开启识别json文件,默认false
cas.serviceRegistry.initFromJson=true
#自动扫描服务配置,默认开启
#cas.serviceRegistry.watcherEnabled=true
#120秒扫描一遍
#cas.serviceRegistry.repeatInterval=120000
#延迟15秒开启
#cas.serviceRegistry.startDelay=15000
#资源加载路径
#cas.serviceRegistry.config.location=classpath:/services

启动时打印以下日志,说明服务注册成功。

2018-03-18 23:36:08,660 INFO [org.apereo.cas.services.AbstractServicesManager] - 
2018-03-18 23:36:08,876 INFO [org.apereo.cas.config.CasServiceRegistryInitializationConfiguration] - 
2018-03-18 23:36:08,877 WARN [org.apereo.cas.services.ServiceRegistryInitializer] - 
2018-03-18 23:36:09,283 INFO [org.apereo.cas.services.AbstractServicesManager] - 
三、搭建客户端

在官方文档中提供了 CAS Java 客户端样例,即 cas-sample-java-webapp。
修改 pom.xml,修改 tomcat7-maven-plugin 设置访问地址为http://localhost:8181/node1



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

CAS Client 通过拦截器将未认证的请求重定向到 CAS Server,这里对 cas-sample-java-webapp 的 web.xml 文件进行修改,将服务端、客户端地址替换为实际测试的地址:





    
    
        CAS Single Sign Out Filter
        org.jasig.cas.client.session.SingleSignOutFilter
        
            casServerUrlPrefix
            http://localhost:8080/cas
        
    

    
        org.jasig.cas.client.session.SingleSignOutHttpSessionListener
    

    
    
        CAS Authentication Filter
        
        org.jasig.cas.client.authentication.AuthenticationFilter
        
            casServerLoginUrl
            http://localhost:8080/cas/login
        
        
            serverName
            
            http://localhost:8181/node1
        
    

    
    
        CAS Validation Filter
        
        org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter
        
            casServerUrlPrefix
            http://localhost:8080/cas
        
        
            serverName
            http://localhost:8181/node1
        
        
            redirectAfterValidation
            true
        
        
            useSession
            true
        
        
            authn_method
            mfa-duo
        
    

    
    
        CAS HttpServletRequest Wrapper Filter
        org.jasig.cas.client.util.HttpServletRequestWrapperFilter
    

    
    

    
        CAS Single Sign Out Filter
        /*
    

    
        CAS Validation Filter
        /*
    

    
        CAS Authentication Filter
        /*
    

    
        CAS HttpServletRequest Wrapper Filter
        /*
    

    
        
            index.jsp
        
    

此时访问
http://localhost:8181/node1
会跳转至
http://localhost:8080/cas/login?service=http%3A%2F%2Flocalhost%3A8181%2Fnode1%2F
输入用户信息,登录成功,返回
http://localhost:8181/node1/;jsessionid=6628138DCAAA5BA3481CD4C9238FEBFF

利用相同的方法配置第二个客户端,访问地址为http://localhost:8282/node2,可知在 node1 登录成功的情况下,无需再次输入用户密码即可访问 node2 后台页面。

至此,开发环境搭建完毕。由于客户端只是对 web.xml 中的过滤器进行配置,可以很方便地集成到各个业务系统中。

转载请注明出处。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68870.html

相关文章

  • CAS 5.2.x 单点登录 - 实现原理及源码浅析

    摘要:上一篇文章简单介绍了在本地开发环境中搭建服务端和客户端,对单点登录过程有了一个直观的认识之后,本篇将探讨单点登录的实现原理。因此引入服务端作为用户信息鉴别和传递中介,达到单点登录的效果。为该流程的实现类。表示对返回结果的处理。 上一篇文章简单介绍了 CAS 5.2.2 在本地开发环境中搭建服务端和客户端,对单点登录过程有了一个直观的认识之后,本篇将探讨 CAS 单点登录的实现原理。 一...

    elisa.yang 评论0 收藏0
  • 从http验证流程解析CAS单点登录

    JAVA单点登录有好多种方式,譬如用cookie的domain做,用中间代理做等等,但都需要自行做许多开发工作。而其中耶鲁大学的开源项目CAS提供了一个一站式解决方案,只需很少的扩展即可轻松实现企业级单点登录。基础知识网上其他挺多的,这里我就不详述了。本文通过分析http请求过程中httpheader,cookie等数据剖析了cas(非代理模式,默认验证逻辑。其他如restletAPI等可扩展逻辑...

    honhon 评论0 收藏0
  • 号外:友户通支持企业自有用户中心啦

    摘要:针对这种情况,友户通特定开发了联邦用户中心来支持企业的自有用户中心。友户通支持通过协议使用企业内部的支持协议的用户中心账号进行登录。友户通目前支持标准协议以及友户通自定义协议可供企业集成。 友户通做用友云的用户系统也一年多了,经常听实施、售前等说要私有化部署友户通,原因无非是企业的考虑到用户安全性和单一用户账号的需求。但由于用户管理的复杂性,友户通部署与维护并不容易,因此经常纠结在用户...

    妤锋シ 评论0 收藏0
  • Python Flask单点登录问题

    摘要:如果一旦加密算法泄露了,攻击者可以在本地建立一个实现了登录接口的假冒父应用,通过绑定来把子应用发起的请求指向本地的假冒父应用,并作出回应。 1.什么是单点登录? 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。客户端持有ID,服务端持有session...

    tuomao 评论0 收藏0

发表评论

0条评论

Lin_YT

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<