开发者社区> wsc449> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

CAS单点登录方案

简介: 应用场景 当几个应用系统需要同一个入口时,那么此时就需要配置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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
系统间跳转安全加密方案
提供系统间跳转安全加密方案
0 0
单点登录原理及其实现方案
单点登录(Single sign-on,简称 SSO),一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。 当拥有该属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。所以你会看到很多域名直接是sso.domain.com,也就是用来做单点登录。
0 0
Egg.js中间件进行登录鉴权的核心思路
Egg.js中间件进行登录鉴权的核心思路
0 0
【最简OAuth 2.0 教程】开发认证中心及资源服务器接入
背景: 网上很多讲配置 oauth2 ,配置方法 复杂纷繁对于初学者很不友好,让人望而却步 欢迎关注本系列博客 基于 spring cloud 最新版本 hoxton 完成oauth2 的实践 基于 Spring Cloud OAuth ,用简洁的方式搭建oauth的认证中心, 关于oauth2 的授权模式 请直接参考 [阮一峰 OAuth 2.
1660 0
网站防刷方案
目录[-] 网站防刷方案 网站重复请求解决方案 Mr. Neo Chen (netkiller), 陈景峰(BG7NYT) 1. 访问网站所涉及环节 2. 浏览器款控制方案 3. CDN 与 反向代理 4. 网络设备控制方法 5. 服务器上做控制 5.1. 操作系统部分 提示 5.2. WEB 服务器部分 6. 通过程序控制访问行为 提示 7. 总结 网站防刷方案 摘要 这是讲述如何防止重复请求你的网站, 包括如,爬虫,数据采集,刷排名,批量注册,批量发帖,利用漏洞获取网站数据等等。
1955 0
SSO单点登录系列5:cas单点登录增加验证码功能完整步骤
详见 http://blog.csdn.net/ae6623/article/details/8919718 环境: server端:cas-server-core-3.5.2.jar、cas-client-core-3.
814 0
有关单点登录的几种方案
原文 http://www.cnblogs.com/jake1/archive/2013/04/28/sso_scheme.html 前几天,花了比较多时间在研究Eentity framework, 从今天开始,我要把时间集中在,介绍以前做门户网站的一些好的项目方案了.
791 0
+关注
wsc449
python,c#,scala
文章
问答
文章排行榜
最热
最新
相关电子书
更多
无需部署的前端中间件技术——企业移动化新思路
立即下载
一招玩转微服务注册&配置中心
立即下载
无需从0开发 1天上手只能语音离在线方案
立即下载