基于CAS的单点登录实战(1)-- 搭建cas服务器
公司有几个系统想做SSO,然后开始研究cas。系统是Centos7
搭建CAS服务器#
cas的版本比较多,先在网上搜了一下各种教程配置经验。本来想搭建最新的CAS版本,然而为了快速部署,选择了网上教程比较详细的cas-4.0.0版本。
安装包和环境依赖
cas-server是依赖jdk,tomcat,spring等,jdk和tomcat装最新版本就可以了,cas-server这里选了4.0.0.因为版本不同配置还有是区别的,所以这里强调一下版本。因为没玩过JAVA,spring framework我没装,可能是tomcat自带的。。新版本的cas-server好像是通过maven来装,具体怎么装我不知道。。但是有点想研究,看以后会不会填坑。
1.1 jdk
yum install 安装貌似默认是1.7,然后我选了1.8
1.2 tomcat
yum install 安装最新版
1.3 spring framework
我没装。。然后没啥影响。。
1.3 cas-server-4.0.0
在cas官网下载的,速度超级慢。不知道有没有镜像。下载完成然后解压。进入文件夹 找到cas-server-4.0.0/modules/cas-server-webapp-4.0.0.war这个 war 文件,拷贝到tomcat的webapps目录下。默认目录在/usr/local/tomcat/webapps/。以前没玩过JAVA不知道,原来war文件拷贝过来就会马上自动解压成文件夹,然后war移动或删除那个同名文件压也会被删!modules 目录下的其他jar是可能需要的依赖包,放到webapps下面自动生成的文件夹里的WEB-INF/lib/下,比如我这里叫cas-server-webapp-4.0.0/WEB-INF/lib/。然后启动tomcat,在浏览器打开。
tomcat的启动和关闭在tomcat目录下的bin/目录的shutdown.sh和startup.sh:

(吐槽下tomcat的重启慢到令人发指,推荐一个解决办法)导入证书OR去除https限制
2.1 生成ssl证书
cas默认使用https,需要ssl证书。我跟着步骤生成了一个crt证书,然后就不知道干嘛了。所以还是老老实实用http跑通再说。
2.2 去除https限制
主要有3个地方需要修改:
2.21WEB-INF/deployerConfigContext.xml找到proxyAuthenticationHandle添加属性p:requireSecure="false".
<bean id="proxyAuthenticationHandler"
class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient"
p:requireSecure="false" />
2.22 `WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml` 将 `p:cookieSecure="true"` 改为 `p:cookieSecure="false"`
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false"
p:cookieMaxAge="-1"
p:cookieName="CASTGC"
p:cookiePath="/cas" />
2.23 `WEB-INF/spring-configuration/warnCookieGenerator.xml` 将 `p:cookieSecure="true"` 改为 `p:cookieSecure="false"`。 同上
- 验证方式
比较好奇应该90%都会使用数据库的用户和密码进行认证吧,为啥cas的默认认证方式不设置成数据库方式呢。难道是为了给用户自己选择数据库的自由?这里主要是3个XML属性配置
3.0 依赖包
+.mysql-connector-java-5.1.42.jar跟版本关系不大
+.c3p0-0.9.1.2.jar这个很关键
+.cas-server-support-jdbc-4.0.0.jar注意跟cas-server版本一致
3.1 数据源(数据库配置)
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="${database.driverClass}"
p:jdbcUrl="${database.url}"
p:user="${database.user}"
p:password="${database.password}" />
网上配置教程大都是直接把配置写到这里,我这里建议用官方文档的变量方式,一来避免`jdbcUrl`的特殊字符编码问题,而来方便修改配置。这些变量都可以在同目录下的 `cas.properties`中配置
# == Basic database connection pool configuration ==
database.driverClass=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/cas_test?useUnicode=true&characterEncoding=UTF8
database.user=root
database.password=root
3.2 加密算法
<bean id="passwordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
c:encodingAlgorithm="SHA1"
p:characterEncoding="UTF-8" />
系统自带MD5和SHA1加密算法,可以自定义,然而因为我没搞过JAVA所以就停留在这一步,没有深入研究。
3.3 认证方式
<bean id="dbAuthHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="dataSource"
p:passwordEncoder-ref="passwordEncoder"
p:sql="SELECT `password` FROM `cas_user` WHERE `username`=?" />
可以看出上面2个配置项都是给这个做铺垫。这个SQL语句根据自己的数据库进行查询。网上教程有提到还有一个地方要修改
<entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
<!-- <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" /> -->
<entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver" />
个人理解这里不一定要改成这样,如果保留原来的`primaryAuthenticationHandler`那么需要把原来的`<bean id="primaryAuthenticationHandler"...`给注释掉。而另指定一个认证器`dbAuthHandler`就可以不用注释掉原来的。到这里配置完成。
我在这里配置了无数遍,然后各种错误。而且我又不知道怎么查看java/tomcat错误,最后莫名其妙成功了。总结一下可能出错的地方:
dataSource 中的 class , 网上有的给出来的不一样,建议以官网为主
jdbcUrl 可能有特殊字符编码问题,建议写到 cas.properties
依赖包不对
- 返回用户信息
4.1 从数据库查询更多信息
<!-- 查询更多用户字段 -->
<bean class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao" id="attributeRepository">
<constructor-arg index="0" ref="dataSource"/>
<!-- 这里配置查询语句, {0},{1}对应接下来的`queryAttributeMapping`的map索引 -->
<constructor-arg index="1" value="select * from cas_user where {0}"/>
<property name="queryAttributeMapping">
<map>
<!--这里的key需写username和登录页面一致,value对应数据库用户名字段-->
<entry key="username" value="username"/>
</map>
</property>
<property name="resultAttributeMapping">
<map>
<!--key为对应的数据库字段名称,value为提供给客户端获取的属性名字,系统会自动填充值-->
<entry key="id" value="uid"/>
<entry key="username" value="username"/>
<entry key="password" value="password"/>
<entry key="email" value="email"/>
<entry key="cnName" value="cname"/>
</map>
</property>
<!--
<property name="queryType">
<value>OR</value>
</property>
-->
</bean>
4.2 配置返回字段
<util:list id="registeredServicesList">
<bean class="org.jasig.cas.services.RegexRegisteredService"
p:id="0" p:name="HTTP and IMAP" p:description="Allows HTTP(S) and IMAP(S) protocols"
p:serviceId="^(https?|imaps?)://.*" p:evaluationOrder="10000001">
<!-- 这里是重点 -->
<property name="allowedAttributes">
<list>
<value>uid</value>
<value>username</value>
<value>password</value>
<value>email</value>
<value>cname</value>
</list>
</property>
</bean>
...
到这里cas服务端的配置基本完成了。good luck。
基于CAS的单点登录实战(1)-- 搭建cas服务器的更多相关文章
- 基于CAS的单点登录实战(2)-- 搭建cas的php客户端
在这之前已经搭好了CAS服务端 基于CAS的单点登录实战(1)-- 搭建cas服务器 PHP-Client php-Client是官方支持的,去官网下个最新版就好了.phpCAS 接入很简单,解压放到 ...
- [精华][推荐]CAS SSO 单点登录框架学习 环境搭建
1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...
- 手把手教你学会 基于JWT的单点登录
最近我们组要给负责的一个管理系统 A 集成另外一个系统 B,为了让用户使用更加便捷,避免多个系统重复登录,希望能够达到这样的效果--用户只需登录一次就能够在这两个系统中进行操作.很明显这就是单点登 ...
- 基于SAML的单点登录介绍
http://blog.csdn.net/csethcrm/article/details/20694993 一.背景知识: SAML即安全断言标记语言,英文全称是Security Assertion ...
- CAS实现单点登录SSO执行原理及部署
一.不落俗套的开始 1.背景介绍 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS框架:CAS(Centra ...
- Spring Security 集成CAS实现单点登录
参考:http://elim.iteye.com/blog/2270446 众所周知,Cas是对单点登录的一种实现.本文假设读者已经了解了Cas的原理及其使用,这些内容在本文将不会讨论.Cas有Ser ...
- CAS单点登录实践(spring cas client配置)
前言: 最近的项目需要将多个站点统一登录,查阅了资料Jasig cas(Central Authentication Service)(官方站点:http://www.jasig.org/cas)使用 ...
- cas实现单点登录原理
1.基于Cookie的单点登录的回顾 基于Cookie的单点登录核心原理: 将用户名密码加密之后存于Cookie中,之后访问网站时在过滤器(filter)中校验用户权限,如果没有权限则从 ...
- Cas(07)——建立使用Cas进行单点登录的应用
建立使用Cas进行单点登录的应用 目录 1.1加入cas-client-core-xxx.jar到classpath 1.2配置Filter 1.2.1AuthenticationFilter 1.2 ...
随机推荐
- Windows修改MySQL用户root密码
MySQL是一个关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软 ...
- maven项目依赖包问题
问题 maven传递依赖 解决方案 前段时间,开发中遇到一个关于maven依赖包的问题:由于业务需要,支付网关对账代码中的slf4j-api包需要更新,原包为1.5.8版本,需要更新到1.6.4版 ...
- 前端学习笔记一:什么是W3C?
俗话说好记性不如烂笔头,最近在学习前端技术,一些理论性的知识虽然理解,但有时确不能精准的用语言表述出来,那就索性记下来吧,以备以后时常查看: 我们平时说的W3C,其实是World Wide Web C ...
- Mycat实战之配置EP分片
ER分片介绍 以mycat逻辑库里面自带的例子,例如客户(CUSTOMER)跟订单(orders)以及订单条目(orders_item),订单条目依 赖订单表,订单表依赖客户,这样客户与订单以及订单条 ...
- jQuery简单介绍及基本用法(选择器&DOM操作)
简介 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是“write Le ...
- Python和其他语言的区别 (简单精辟啊 手打)
首先是简单 读和写非常容易 免费 免费且开源 社区为专业人士和初学者提供知识和经验的分享交流平台 兼容性 与多平台兼容 面向对象 支持面向对象编程 php面向网络 函数库 python 社区创建了丰富 ...
- 2018 Spring Single Training B (uva 572,HihoCoder 1632,POJ 2387,POJ 2236,UVA 10054,HDU 2141)
这场比赛可以说是灰常的水了,涨信心场?? 今下午义务劳动,去拿着锄头发了将近一小时呆,发现自己实在是干不了什么,就跑到实验室打比赛了~ 之前的比赛补题补了这么久连一场完整的都没补完,结果这场比完后一小 ...
- LoadRunner 关联和集合点、检查点
1)关联的定义 很多时候,当时录完之后,没有问题.过一段时间再跑脚本,就不会成功.比如session,过期了,再一次使用,就会出错.这个时候,需要在每次访问的时候动态的拿到session,这种情况就需 ...
- Fedora 16下安装ruby on rails
Fedora 16下安装ruby on rails 最近在windows下写了些rails小程序,问题一个接一个,到最后终于坚信了那句话“windows不适合用于ruby on rails开发”.于是 ...
- c语言学习笔记 if语句的条件判断
可能经常会看到错误的if语句示范,比如这样的: if(a=6) { printf("hello"); } if语句块执行的条件是if条件的运算结果不是0则执行if语句块. a=6这 ...