转载地址: CAS 4.0 单点登录教程

1、概述

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 耶鲁大学(yale)开发的单点登录(Single Sign On)系统称为CAS(Central Authentication Service)被设计成一个独立的Web应用程序(cas.war)。 CAS在2004年12月成为Jasig项目,所以也叫JA-SIG CAS。
本文中服务器版本基于4.0.0版本,对应的客户端版本为3.3.3;
官网:https://apereo.github.io/cas/4.0.x/index.html

2、CAS 原理和协议

从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。

上面是 CAS 最基本的协议过程:
CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。对于访问受保护资源的每个 Web 请求,CAS Client 会分析该请求的 Http 请求中是否包含 Service Ticket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的 CAS Server 登录地址,并传递 Service (也就是要访问的目的资源地址),以便登录成功过后转回该地址。用户在第 3 步中输入认证信息,如果登录成功,CAS Server 随机产生一个相当长度、唯一、不可伪造的 Service Ticket,并缓存以待将来验证,之后系统自动重定向到 Service 所在地址,并为客户端浏览器设置一个 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新产生的 Ticket 过后,在第 5,6 步中与 CAS Server 进行身份合适,以确保 Service Ticket 的合法性。
在该协议中,所有与 CAS 的交互均采用 SSL 协议,确保,ST 和 TGC 的安全性。协议工作过程中会有 2 次重定向的过程,但是 CAS Client 与 CAS Server 之间进行 Ticket 验证的过程对于用户是透明的。
另外,CAS 协议中还提供了 Proxy (代理)模式,以适应更加高级、复杂的应用场景,具体介绍可以参考 CAS 官方网站上的相关文档。

3、环境

  • Tomcat 8.x 本文中安装目录为: D:\tool\apache-tomcat-8.0.21
  • JDK 8 本文中安装目录为: D:\tool\Java\jdk1.8.0_45
  • CAS Server版本: cas-server-4.0.0
  • CAS Client版本: cas-client-3.3.3
    关于CAS SSO的证书配置以及简单的验证可以到博主之前的博文 : CAS SSO 简介

4、CAS Server 用户认证定制

首先,打开D:\tool\apache-tomcat-8.0.21\webapps\cas\WEB-INFdeployerConfigContext.xml
注释掉默认的用户验证,注释的代码如下:

<bean id="primaryAuthenticationHandler"  class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">  <property name="users">  <map>  <entry key="casuser" value="Mellon"/>  </map>  </property>
</bean> 

添加JDBC验证方式如下:

<!-- 数据库连接 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >  <property name="driverClass" value="com.mysql.jdbc.Driver"/>      <property name="jdbcUrl" value="jdbc:mysql://192.168.0.10:3306/college?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"/>      <property name="user" value="root"/>  <property name="password" value="root 1"/>  <!-- 博主遇到的MySQL8小时问题 -->  <property name="preferredTestQuery" value="SELECT 1"/>      <property name="idleConnectionTestPeriod" value="18000"/>      <property name="testConnectionOnCheckout" value="true"/>
</bean>
<!-- 可选配置:数据库加密方式 -->
<bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"  c:encodingAlgorithm="SHA1"  p:characterEncoding="UTF-8" />  <bean id="dbAuthHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"  p:dataSource-ref="dataSource"  p:sql="select password from t_user_login where username=? and type='1'"  p:passwordEncoder-ref="passwordEncoder" />  

找到bean的id为authenticationManager做以下修改.

<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager">  <constructor-arg>  <map>  <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />  <!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" /> -->  <entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/>  </map>  </constructor-arg>  <property name="authenticationPolicy">  <bean class="org.jasig.cas.authentication.AnyAuthenticationPolicy" />  </property>  </bean>  

根据上述配置,我们需要在D:\apache-tomcat-8.0.21\webapps\cas\WEB-INF\lib中加入c3p0-0.9.1.2.jar包、MySQL-connector-java-5.1.21.jar包和cas-server-support-jdbc-4.0.0.jar包。

5、CAS Client 配置

<!-- 单点登出监听器 -->
<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>  <filter-name>CAS Authentication Filter</filter-name>  <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>  <init-param>  <param-name>casServerLoginUrl</param-name>  <param-value>https://localhost:8443/cas/login</param-value>  </init-param>  <init-param>  <param-name>serverName</param-name>  <param-value>http://localhost:8080</param-value>  </init-param>
</filter>  <!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
<filter>  <filter-name>CAS Validation Filter</filter-name>  <filter-class>org.jasig.cas.client.validation.Cas10TicketValidationFilter</filter-class>  <init-param>  <param-name>casServerUrlPrefix</param-name>  <param-value>https://localhost:8443/cas</param-value>  </init-param>  <init-param>  <param-name>serverName</param-name>  <param-value>http://localhost:8080</param-value>  </init-param>  <init-param>  <param-name>redirectAfterValidation</param-name>  <param-value>true</param-value>  </init-param>
</filter>  <!--   该过滤器负责实现HttpServletRequest请求的包裹,  比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。
-->
<filter>  <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>  <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>  <!--   该过滤器使得开发者可以通过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 Single Sign Out Filter</filter-name>  <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>  <filter-name>CAS Authentication Filter</filter-name>  <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>  <filter-name>CAS Validation Filter</filter-name>  <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>  <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>  <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>  <filter-name>CAS Assertion Thread Local Filter</filter-name>  <url-pattern>/*</url-pattern>
</filter-mapping>  

CAS SSO 4.0.x 用户数据库验证相关推荐

  1. MySQL8.0修改用户密码验证

    问题: MySQL升级到8.0,客户端或者连接器没有升级到8.0,连接时出现吧报错: Authentication plugin 'caching_sha2_password' is not supp ...

  2. CAS SSO 4.0.x 集成OAuth(微信登陆示例)

    由于公司需要cas集成微信.但是在网上没有找到相应的示例.然后我就跑到官网上去找了一下CAS怎么集成OAuth的.这是基于pac4j-oauth-1.4.1.jar包org.pac4j.oauth.c ...

  3. CAS SSO 4.0.x 增加验证码

    这一篇主要是讲解怎么在登录页上添加验证码功能,默认的登录页是只有用户名与密码功能.其他我觉得加验证码没什么用,因为现在我部门做的系统主要是放在内网里,外网是不能访问的.登录页的验证码主要是为了防止进账 ...

  4. 基于javascript的asp数据库操作类,含分页、字符串截取、用户登陆验证[原创]

    2005.01.15发表于blog.csdn.net/zxub 无聊又用了用asp,发现还是不爽,已经习惯了面向对象了,就想改进了,vbscript不用,感觉看起来很不爽,就用javascript写了 ...

  5. 浅谈DM达梦数据库安全管理之用户身份验证与权限管理

            数据库安全管理是指采取各种安全措施对数据库及其相关文件和数据进行保护.DM达梦数据库提供了包括用户标识与鉴别.自主与强制访问控制.通信与存储 加密.审计等丰富的安全功能.达梦数据库 的 ...

  6. mysql 给库赋权,MySQL 8.0.18给数据库添加用户和赋权问题

    MySQL 8.0.18给数据库添加用户和赋权问题 1. 首选使用root用户登录数据库 mysql -uroot -p 2. 使用mysql 数据库 USE mysql; 3. 为mysql创建用户 ...

  7. 在登录页面中js进行正则验证电话号码和邮箱地址,并使用ajax进行用户ID的数据库验证

    本文说的是在登录页面中使用js进行正则验证并使用ajax进行用户ID的数据库验证,另外也加入键盘监听. 先看一下登录的jsp页面代码 <%@ page language="java&q ...

  8. 数据库用户登录验证及注册功能实现

    数据库用户登录验证及注册功能实现 1.mysql数据库安装 2.解决navicat连接mysql的密码错误问题 3.创建数据库.用户表.插入数据 (1)进入mysql数据库 (2) 创建数据库dnn_ ...

  9. CAS 4.0.0RC 配置MD5验证功能

    配置内容同一样,只是增加一些配置. 因为cas已经默认就支持MD5加密验证,所以只是修改一下配置就可以了. <bean id="primaryAuthenticationHandler ...

最新文章

  1. laravel auth(api)-attempt 返回false_3分钟短文:Laravel命令行参数和可选项分不清?怎么可能...
  2. 【经验分享】TinyMind 多标签图像分类竞赛小试牛刀——by:for the dream
  3. 技术17期:近几年崛起的Pytorch究竟是何方神圣?
  4. LeetCode 1663. 具有给定数值的最小字符串
  5. 关于多属性查找问题的sphinx解决方案
  6. Android录音采样率限制问题(十一)
  7. Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 prometheus 监控
  8. 网络蜘蛛爬取邮箱地址
  9. truecrypt使用教程_如何使用TrueCrypt保护您的闪存驱动器数据
  10. 快应用广告开发、各大手机平台测试id、错误码汇总
  11. 杨永强“兑”现承诺 乐视云发力VaaS
  12. iis打不开php,php出现404找不到网页错误 iis配置问题解决
  13. Excel冻结首行/首列
  14. 国际市场营销知识框架图_留学热门 | 伦敦里士满大学市场营销本科专业
  15. mentohust for linux,GitHub - xdlinux/mentohust_xidian: A ruijie client for xidian university
  16. deeptools | bam to BigWig, 并使用IGV可视化峰图差异
  17. cesium 移除实体方法
  18. 2.6亿孤独灵魂能否听出一座喜马拉雅
  19. 邮箱大师手机版服务器异常,网易邮箱大师无法收信怎么办 网易邮箱大师无法收信的解决办法...
  20. Linux命令行下设置黑底绿字

热门文章

  1. 2272: 又是01串(http://acm.zzuli.edu.cn/problem.php?id=2272csrf=nr0h1HsiO5WDrN3Jk1j9aUmgYOdn7QAV)
  2. 开关电源DC/DC的直流电流、交流电流、电感纹波电流、电流纹波率
  3. Android app:用Log方法打印调试信息 (Log.v,Log.d,Log.i,Log.w,Log.e)以及修改LogCat的颜色
  4. cmd 批量ping命令
  5. 达梦DCA认证培训考试心得体会
  6. 游戏素材网站资源共享与下载
  7. 计算机二级安徽省知识点,安徽省计算机二级例题
  8. 代码随想录算法训练营第二天 | 力扣977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II
  9. Renpy hover_sound多次触发 重复声音BUG
  10. 红客团队html引导,html元素 - 网站搭建 - 中国红客联盟 - Powered by HUC