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
目录
相关文章
|
7月前
|
安全
dapp互助预约排单系统开发步骤指南/案例设计/规则详细/方案逻辑/源码程序
-Determine the core functions and objectives of the system, understand user needs and expectations.
|
7月前
|
SQL 安全 网络安全
交易所开发测试版丨交易所系统开发规则玩法/架构设计/项目步骤/方案逻辑/案例解析/源码部署
The development process of the exchange system involves multiple steps and links. The following is the detailed process and steps for the development of the exchange system:
|
7月前
|
自然语言处理 安全
Web3.0钱包系统开发(开发功能)/指南教程/步骤流程/方案设计/项目逻辑/规则玩法/案例源码
Wallet type selection: Determine the type of wallet, which can be a browser plugin wallet, mobile application wallet, or online web wallet. The choice of wallet type should be based on the target user group and usage environment.
|
5月前
|
NoSQL Redis 微服务
微服务轮子项目(05) - 服务认证架构设计(token自动续签)
微服务轮子项目(05) - 服务认证架构设计(token自动续签)
35 0
|
5月前
|
安全 Java 数据库
深入Spring Security魔幻山谷-获取认证机制核心原理讲解(新版)
在神秘的Web系统世界里,有一座名为Spring Security的山谷,它高耸入云,蔓延千里,鸟飞不过,兽攀不了。这座山谷只有一条逼仄的道路可通。然而,若要通过这条道路前往另一头的世界,就必须先拿到一块名为token的令牌,只有这样,道路上戍守关口的士兵才会放行。
25 0
|
5月前
|
NoSQL 应用服务中间件 数据库
淘东电商项目(37) -SSO单点登录(高可用实现思路)
淘东电商项目(37) -SSO单点登录(高可用实现思路)
32 0
|
6月前
|
敏捷开发 存储 测试技术
链动2+1系统开发项目案例丨指南教程丨需求方案丨功能设计丨成熟技术丨步骤逻辑丨源码程序
用户需求导向:系统开发应以用户需求为中心,从用户的角度思考,了解用户的真实需求和期望,以提供优质的用户体验。
|
8月前
|
应用服务中间件
五分钟初步了解CAS单点登录
五分钟初步了解CAS单点登录
107 0
五分钟初步了解CAS单点登录
|
10月前
|
缓存 JSON NoSQL
低版本SpringBoot Redis缓存旁路设计改造方案实践
低版本SpringBoot Redis缓存旁路设计改造方案实践
273 0
|
11月前
|
XML 安全 JavaScript
技术汇总:第八章:CAS单点登录
技术汇总:第八章:CAS单点登录
300 0