您的位置:

CAS单点登录原理、实现及其应用

一、CAS单点登录概述

CAS (Central Authentication Service) 单点登录是一种开源的企业级单点登录系统。它通过提供可重用的身份认证服务,使之成为一种简单而有效的 Web 单点登录解决方案。

CAS 单点登录主要由两个部分组成:CAS服务器和CAS客户端。CAS服务器是用于提供身份认证服务的单独服务。而CAS客户端则是需要接入CAS服务器进行身份认证的应用系统。

二、CAS单点登录原理

CAS单点登录的核心原理是代理允许,CAS认证中心负责生成 TGT (Ticket Granting Ticket) 和 ST (Service Ticket) 以及校验 TGT 和 ST 的有效性。CAS客户端调用CAS服务的统一登录界面,将用户登录信息提交给 CAS认证中心进行身份认证,认证通过后,CAS认证中心会生成一个 TGT 并将其返回给 CAS客户端。当用户访问其他客户端应用系统时,如果没有经过身份验证,则此时客户端应用会将请求转发到 CAS 认证中心,由 CAS 认证中心根据 ST 的有效性向客户端应用系统返回用户的信息。

CAS认证中心会在用户初次认证通过后,记录 ST 的有效期,每次 CAS客户端向 CAS认证中心校验 ST 时,CAS认证中心都会判断 ST 是否过期或已被使用过,如果 ST 有效,就返回给 CAS客户端 ST 中包含的用户身份信息。

三、CAS单点登录的实现

1、部署CAS服务器

部署CAS服务器需要有一定的 Java 编程和服务器管理经验。首先需下载CAS服务器的压缩包并解压,配置部署文件,主要有以下几个文件:

  • deployerConfigContext.xml
  • log4j2.xml
  • ticketExpirationPolicies.xml
  • web.xml

其中,deployerConfigContext.xml 为主要配置文件,用以配置 CAS 服务端的具体实现。ticketExpirationPolicies.xml 用以配置 CAS 服务端票据的过期时间。

2、集成CAS客户端

CAS客户端是需要接入CAS服务器进行身份验证的应用系统。CAS客户端可以是 Java 应用、PHP 应用或其他类型的应用系统。

集成CAS客户端需要对CAS客户端进行配置。CAS客户端主要配置以下信息:

  • cas.server.url.prefix:CAS服务器所在地址前缀
  • cas.server.login_url:CAS服务器登录地址
  • cas.server.logout_url:CAS服务器注销地址
  • cas.client.service_url:CAS客户端应用系统地址(需要向CAS服务器进行注册)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/DTD/spring-beans.dtd">
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:security="http://www.springframework.org/schema/security"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">

    <!--配置CAS客户端-->
    <bean id="casClient" class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
        <constructor-arg value="https://cas.server.com" />
    </bean>

    <bean id="casAuthenticationEntryPoint" class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
        <property name="loginUrl" value="https://cas.server.com/login" />
        <property name="serviceProperties" ref="casProperties" />
    </bean>

    <bean id="casProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="properties">
            <props>
                <prop key="casServerUrlPrefix">https://cas.server.com</prop>
                <prop key="casServerLoginUrl">https://cas.server.com/login</prop>
                <prop key="casServerLogoutUrl">https://cas.server.com/logout</prop>
                <prop key="casClientServiceUrl">https://client.server.com/service</prop>
            </props>
        </property>
    </bean>

</beans>

四、CAS单点登录的应用场景

1、统一身份认证

CAS单点登录可以用于实现企业内部各个应用系统的身份认证,用户登录不同的应用系统无需再次输入用户名和密码,提高了操作效率。

2、集中控制系统权限

CAS单点登录可以进行权限控制,通过配置授权策略实现对特定用户和角色等访问权限的控制。

3、实现单点注销

CAS单点登录可以实现单点注销,当用户在一个客户端应用注销登录时,会自动触发其他已经登录的应用进行注销。

4、简化开发和维护

使用CAS单点登录可以实现代码的复用,不同应用系统只需要进行简单的配置就可以实现单点登录的功能,减少了开发和维护的工作量。