CAS单点登录方案

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 应用场景 当几个应用系统需要同一个入口时,那么此时就需要配置CAS统一单点登录了。操作步骤 SSO实现有很多产品,我们今天选用的这个是耶鲁大学发明的CAS SSO服务器。

应用场景

当几个应用系统需要同一个入口时,那么此时就需要配置CAS统一单点登录了。

操作步骤

SSO实现有很多产品,我们今天选用的这个是耶鲁大学发明的CAS SSO服务器。这个CAS SSO是目前我看到过的功能较全的,使用也是最简单的配置式SSO服务器,它基于SPRING的原理,因此这个配置文件我们看起来因当是相当的熟悉的。
示例以cas-server-3.5.2-release.zip结合web应用完成单点登录方案验证。

1、搭建cas server环境

打开cas.zip包,解压后,将cas文件夹拷贝到tomcat的webapps中。
启动应用服务器后,war包自动部署后访问http://ip:port/cas/login打开cas登录页面,默认密码admin/admin,点击登录显示登录成功,表明cas server搭建成功。

2、配置web实现单点登录

打开应用服务器目录,进入WEB-INF目录,编辑web.xml文件,具体修改过程如下所示:

首先注释下面filter过滤器
<!--
<filter>
    <filter-name>userAuthenticationFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <init-param>
        <param-name>targetBeanName</param-name>
        <param-value>userAuthenticationFilter</param-value>
    </init-param>
    <init-param>
        <param-name>targetFilterLifecycle</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>userAuthenticationFilter</filter-name>
    <url-pattern>*.do</url-pattern>
</filter-mapping> 
-->
接下来新增过滤器如下(放到过滤器的最前面)
<!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->
<listener>
    <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!-- 该过滤器用于实现单点登出功能,可选配置 -->
<filter>
    <filter-name>CAS Single Sign Out Filter</filter-name>
        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CAS Single Sign Out Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责用户的认证工作,必须启用它 -->    
<filter>
    <filter-name>CAS Authentication Filter</filter-name>
    <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
    <init-param>
        <param-name>localLoginUrl</param-name>
        <param-value>http://192.168.202.6:8086/dgs/login.do</param-value>
    </init-param>
    <!--这里的server是服务端的IP-->
    <init-param>
        <param-name>casServerLoginUrl</param-name>
        <param-value>http://192.168.202.6:8081/cas/login</param-value>
    </init-param>
    <init-param>
        <param-name>renew</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>http://192.168.202.6:8086</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CAS Authentication Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
<filter>
    <filter-name>CAS Validation Filter</filter-name>
    <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
    <init-param>
        <param-name>casServerUrlPrefix</param-name>
        <param-value>http://192.168.202.6: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>serverName</param-name>
        <param-value>http://192.168.202.6:8086</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CAS Validation Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!--该过滤器负责实现HttpServletRequest请求的包裹,比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。-->
<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 HttpServletRequest Wrapper Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!--该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。比如AssertionHolder.getAssertion().getPrincipal().getName()。-->
<filter>
    <filter-name>CAS Assertion Thread Local Filter</filter-name>
    <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>   
<filter-mapping>
    <filter-name>CAS Assertion Thread Local Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

注:以上配置中的IP地址及端口信息请结合cas服务器及web服务器实际部署情况进行修改。
http://127.0.0.1:6080/dgs/login.do为具体应用的登录入口。
http://127.0.0.1:8080/cas/login为CAS单点登录服务器登录入口。

3、web应用单点登录补丁

修改webapps\dgs\WEB-INF\classes中的deploy.properties文件,新增属性
SSO_LOG_EXCEPTION=http://IP:8080/cas/logout?service=http://IP:6080/dgs/login.do
http://IP:8080/cas/logout为CAS server登出连接。

4、CAS从数据库获取登录帐号和密码

CAS默认登录帐号为admin/admin仅用于测试的帐号信息,存在安全隐患,现介绍从数据库中获取帐号和密码的配置方法。

首先创建数据库表TB_SYS_USER,以MYSQL为例,脚本如下
CREATE TABLE `TB_SYS_USER` (
`USER_ID`  varchar(64) NOT NULL ,
`PASSWORD`  varchar(128) NOT NULL ,
PRIMARY KEY (`USER_ID`)
);
同步web应用中的帐号和密码至TB_SYS_USER中。
修改配置文件deployerConfigContext.xml,增加jdbc数据库(以MySql为例)连接
<bean id="dataSource"  class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
    <property name="url" value="jdbc:mysql://192.168.202.6:3306/test" />  
    <property name="username" value="root" />  
    <property name="password" value="11111" />  
</bean>
配置加密方式,CAS内置有MD5加密,也可以自己编写加密类,实现PasswordEncoder接口即可:
<bean id="MD5passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
    <constructor-arg index="0">
        <value>MD5</value>
    </constructor-arg>
</bean>

注释掉默认的验证方式,采用数据库查询验证:
<!--<bean
class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />-->
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">  
    <property name="dataSource" ref="dataSource" ></property>  
    <property name="sql" value="select password from tb_sys_user where user_id=?" />
    <property name="passwordEncoder" ref="MD5passwordEncoder"/>
</bean> 

添加相关jar包至CAS server的WEB-INF目录中的libs中,打开cas-server-3.5.2-release.zip进入modules目录,拷贝cas-server-support-jdbc-3.5.2.jar至libs中,同时下载mysql数据库连接驱动mysql-connector-java-5.0.8-bin.jar至libs中,重启CAS server。

5、服务登出访问

服务器端退出访问:http://localhost:8080/cas/logout,若希望退出后能返回则需要配置,服务端cas-servlet.xml配置
<bean id="logoutController" class="org.jasig.cas.web.LogoutController"
    p:centralAuthenticationService-ref="centralAuthenticationService"
    p:logoutView="casLogoutView"
    p:warnCookieGenerator-ref="warnCookieGenerator"
p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"/>
增加属性 p:followServiceRedirects="true"
退出链接为:http://localhost:8080/cas/logout?service=http://localhost:6080/dgs
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
17天前
|
存储 监控 安全
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
16 0
|
3月前
|
Java
Ruoyi若依前后端一体项目整合cas单点登录
Ruoyi若依前后端一体项目整合cas单点登录
213 0
|
5月前
|
NoSQL Redis 微服务
微服务轮子项目(05) - 服务认证架构设计(token自动续签)
微服务轮子项目(05) - 服务认证架构设计(token自动续签)
34 0
|
5月前
|
缓存 前端开发 安全
微服务轮子项目(06) - 服务认证架构设计(URL级权限控制)
微服务轮子项目(06) - 服务认证架构设计(URL级权限控制)
51 0
|
5月前
|
NoSQL 应用服务中间件 数据库
淘东电商项目(37) -SSO单点登录(高可用实现思路)
淘东电商项目(37) -SSO单点登录(高可用实现思路)
32 0
|
8月前
|
应用服务中间件
五分钟初步了解CAS单点登录
五分钟初步了解CAS单点登录
107 0
五分钟初步了解CAS单点登录
|
10月前
|
缓存 JSON NoSQL
低版本SpringBoot Redis缓存旁路设计改造方案实践
低版本SpringBoot Redis缓存旁路设计改造方案实践
271 0
|
11月前
|
XML 安全 JavaScript
技术汇总:第八章:CAS单点登录
技术汇总:第八章:CAS单点登录
299 0
|
12月前
|
消息中间件 SQL 存储
对比7种分布式事务方案,还是偏爱阿里开源的Seata,真香!(原理+实战)
对比7种分布式事务方案,还是偏爱阿里开源的Seata,真香!(原理+实战)
|
存储 监控 安全
【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
传统上,企业应用程序在公司网络中部署和运行。为了获取有关用户的信息,如用户配置文件和组信息,这些应用程序中的许多都是为与公司目录(如Microsoft Active Directory)集成而构建的。更重要的是,通常使用目录存储和验证用户的凭据。例如,如果您使用在本地运行的SharePoint和Exchange,则您的登录凭据就是您的Active Directory凭据。
288 1
【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式