1     前言

单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架,本文介绍了 CAS 的原理、协议、在 Tomcat 中的配置和使用,研究如何采用 CAS 实现轻量级单点登录解决方案。

CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:

开源的企业级单点登录解决方案。

CAS Server 为需要独立部署的 Web 应用。

CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

2     CAS的原理

2.1               从结构体系看, CAS 包含两部分

CAS Server

CAS Server 负责完成对用户的认证工作, CAS Server 需要独立部署,有不止一种 CAS Server 的实现, Yale CAS Server 和 ESUP CAS Server 都是很不错的选择。

CAS Server 会处理用户名 / 密码等凭证 (Credentials) ,它可能会到数据库检索一条用户帐号信息,也可能在 XML 文件中检索用户密码,对这种方式, CAS 均提供一种灵活但同一的接口 / 实现分离的方式, CAS 究竟是用何种认证方式,跟 CAS 协议是分离的,也就是,这个认证的实现细节可以自己定制和扩展。

CAS Client

CAS Client 负责部署在客户端(注意,我是指 Web 应用),原则上, CAS Client 的部署意味着,当有对本地 Web 应用的受保护资源的访问请求,并且需要对请求方进行身份认证, Web 应用不再接受任何的用户名密码等类似的 Credentials ,而是重定向到 CAS Server 进行认证。

目前, CAS Client 支持(某些在完善中)非常多的客户端,包括 Java 、 .Net 、 ISAPI 、 Php 、 Perl 、 uPortal 、 Acegi 、 Ruby 、 VBScript 等客户端,几乎可以这样说, CAS 协议能够适合任何语言编写的客户端应用。

2.2               协议

从CAS v1到现在的CAS v3,整个协议的基础思想都是基于票据方式。

CAS v1非常原始,传送一个用户名”yes\ndavid.turing”的方式,CAS v2开始使用了XML规范,大大增强了可扩展性,CAS v3开始使用AOP技术,让Spring爱好者可以轻松配置CAS Server到现有的应用环境中。

CAS是通过TGT(Ticket Granting Ticket)来获取ST(Service Ticket),通过ST来访问服务,而CAS也有对应TGT,ST的实体,而且他们在保护TGT的方法上虽然有所区别,但是,最终都可以实现这样一个目的——免去多次登录的麻烦。

TGT + S = ST ?(可能是这样)

下面,我们看看CAS的基本协议框架:

CAS基础模式

上图是一个最基础的 CAS 协议, CAS Client 以 Filter 方式保护 Web 应用的受保护资源,过滤从客户端过来的每一个 Web 请求,同时, CAS Client 会分析 HTTP 请求中是否包请求 Service Ticket(上图中的 Ticket) ,如果没有,则说明该用户是没有经过认证的,于是, CAS Client 会重定向用户请求到 CAS Server ( Step 2 )。 Step 3 是用户认证过程,如果用户提供了正确的 Credentials , CAS Server 会产生一个随机的 Service

Ticket ,然后,缓存该 Ticket ,并且重定向用户到 CAS Client (附带刚才产生的 Service Ticket ), Service Ticket 是不可以伪造的,最后, Step 5 和 Step6 是 CAS Client 和 CAS Server 之间完成了一个对用户的身份核实,用 Ticket 查到 Username ,因为 Ticket 是 CAS Server 产生的,因此,所以 CAS Server 的判断是毋庸置疑的。

该协议完成了一个很简单的任务,就是 User(david.turing) 打开 IE ,直接访问 clientweb 应用,它被立即重定向到 CAS Server 进行认证, User 可能感觉到浏览器在 clientweb 和 casserver 之间重定向,但 User 是看不到, CAS Client 和 CAS Server 相互间的 Service Ticket 核实 (Validation) 过程。当 CAS Server 告知 CAS Client 用户 Service Ticket 对应确凿身份, CAS

Client 才会对当前 Request 的用户进行服务。

CAS浏览器请求序列图

CAS服务器端登陆流程图

3     CAS Server端配置

Server端主要是需要安装Server的WAR包,并运行起来。由于 Client 与 CAS Server 之间的交互采用 Https 协议,因此部署 CAS Server 的服务器还需要支持 SSL 协议。当 SSL 配置成功过后,(也可以不使用SSL协议,而使用普通方式)像普通 Web 应用一样将 CAS Server 部署在服务器上就能正常运行了,不过,在真正使用之前,还需要扩展验证用户的接口。

3.1               增加tomcat的SSL配置

生成key的步骤省略,参看这里,介绍的很详细。之后配置tomcat的server.xml文件,增加如下配置,将JDK的cacerts配置到tomcat的信任库中:

修改%TOMCAT_HOME%/conf/server.xml

去掉下面SSL HTTP那个注释,修改为如下:

Xml代码

SSLEnabled="true"

maxThreads="150"

scheme="https"

secure="true"

clientAuth="false"

sslProtocol="TLS"

keystoreFile="conf/tomcat.keystore"

keystorePass="123456" />

keystoreFile 是tomcat.keystore放置的位置,keystorePass是前面生成tomcat.keystore所设置的密码(123456)

也可取消CAS的HTTPS登录,需要设置几个地方。可以参考这里。

概括来说就是查找Secure字符,找到两个设置的地方,把true改成false;

修改deployerConfigContext.xml

添加p:requireSecure="false"

客户端可能也需要进行修改。

3.2     扩展认证接口

我这里的Cas-server的版本是 3.4.2.1

目前,部署下载的server中module里的war包到tomcat中,启动tomcat,然后访问:https://localhost:8443/cas ,如果能出现正常的 CAS 登录页面,则说明 CAS Server 已经部署成功。

虽然 CAS Server 已经部署成功,但这只是一个缺省的实现,在默认的server界面,只要输入用户名和密码相同,就可以登录。当然,在实际使用的时候,这样做肯定是不行的,还需要根据实际概况做扩展和定制,最主要的是扩展认证 (Authentication) 接口和 CAS Server 的界面。

我们通常都会使用jdbc连接数据库进行认证,这种情况,用户名和密码被保存在数据库的某个表中。需要进行如下配置。

3.2.1         配置jdbc sql语句认证方式

用编辑器打开/webapps/cas-server-3.1.1/WEB-INF/deployerConfigContext.xml,找到如下xml,并注释掉该代码:

在下面填写如下代码:

并添加一个bean:

com.mysql.jdbc.Driver

jdbc:mysql://localhost:3306/test

test

test

假设使用数据库密码sd5加密,则增加配置如下:(红色部分是sd5加密配置)

注意,再次部署,还需要增加几个包,做为依赖,如果使用maven,可以加入如下代码:

mysql

mysql-connector-java

5.1.12

org.apache.openejb

commons-dbcp-all

1.3-r699049

如果您不使用maven管理的话,可以下载相应的包,并拷贝到WEB-INF/lib/中,重新启动tomcat即可。

创建表

mysql> create table user(id int,username char(100) NOT NULL,password char(100) NOT NULL,PRIMARY KEY (id));

mysql> insert into user values(2,'admin','admin123');

3.3               RESTFul 配置

CAS提供了 RestFul API ,Restlet配置如下:

org.jasig.cas

cas-server-integration-restlet

3.4.11

jar

然后再在 web.xml 中加入:

restlet

com.noelios.restlet.ext.spring.RestletFrameworkServlet

1

restlet

/v1/*

3.4              SPRING security 集成

Spring security  3.1.x的首页讲了如何配置它到您的项目,在线官方文档请点击这里;跟CAS相关的章节请点击这里。3.0.X的SPRING官方也有讲解,再这里,讲的没有3.1.X的内容多。

CAS官方网站也给了个例子,用于于Spring security集成,不过讲的也不是很详细,可以点击这里查看。

国内的找了两篇写的可以的,点击 链接1,链接2 来查看。

3.5 关于登出

3.6 登录验证之添加“用户不存在”错误信息

以上都是Server端的配置,下一篇将会总结客户端的配置。

4.问题

4.1证书的问题

在打证书的时候,输入了

您的名字与姓氏是什么?

经测试发现..如果caserver与单点服务在同一台电脑上,用key里注册的localhost访问是不会有问题的.但是如果不在同一台电脑上..内网访问也会出错!

所以这里不主张用localhost,可以用ip注册,内网访问用ip将不会有问题.(可是实际上CAS中也是不主张用IP来注册的)

另一个域名,将localhost改写成caserver单点所在服务器上的计算机名(右击我的电脑,属性,计算机名).测试通过!(这种方式虽然没有问题,但是必须把部署的机器名称改为此认证中的名称,比如master)

4.2 客户端只能使用域名来对中心发出申请,而不能使用IP。

mysql sd5加密语句_CAS原理与配置相关推荐

  1. mysql sd5加密语句_CAS原理与配置-基于CAS的单点登陆的研究(上)

    1     前言 单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任 ...

  2. 高性能Mysql主从架构的复制原理及配置详解

    1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...

  3. Mysql学习总结(18)——Mysql主从架构的复制原理及配置详解

    一.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...

  4. 【Mysql】 update语句更新原理

    update语句的执行流程图,浅色框表示在InnoDB内部执行的,深色框表示在执行器中执行的. 1.首先客户端通过tcp/ip发送一条sql语句到server层的SQL interface 2.SQL ...

  5. MySQL主从复制的原理及配置方法(比较详细)

    MySQL 的数据库的高可用性的架构大概有以下几种:集群,读写分离,主备.而后面两种都是通过复制来实现的.下面将简单介绍复制的原理及配置,以及一些常见的问题 一.复制的原理 MySQL 复制基于主服务 ...

  6. MySQL配置SSL访问-配置 MySQL 使用加密连接

    配置 MySQL 使用加密连接 通过 MySQL 客户端和服务器之间的未加密连接,可以访问网络的人可以监视您的所有流量并检查客户端和服务器之间发送或接收的数据. 当您必须以安全的方式通过网络移动信息时 ...

  7. mysql中如何分页查询_MySQL_mysql分页原理和高效率的mysql分页查询语句,以前我在mysql中分页都是用的 l - phpStudy...

    mysql分页原理和高效率的mysql分页查询语句 以前我在mysql中分页都是用的 limit 100000,20这样的方式,我相信你也是吧,但是要提高效率,让分页的代码效率更高一些,更快一些,那我 ...

  8. laravel mysql 锁表_Laravel 数据库加密及数据库表前缀配置方法

    报错问题:DecryptException in Encrypter.php line 148: The MAC is invalid. 如何运行 php artisan key:generate 这 ...

  9. mysql数据库加密存储过程_数据库系统(六)---MySQL语句及存储过程

    1.存储过程是一组为了完成某项特定功能的 SQL 语句集,其实质上就是一段存储在数据库中的代码,它可以由声明式的 SQL 语句(如 CREATE.UPDATE 和SELECT 等语句)和过程式 SQL ...

最新文章

  1. android开发系列之多线程
  2. Fxx and game hdu 5945 单调队列dp
  3. Git清除本地账号密码/保存账号密码
  4. vue如何获取tree当前选中的节点_vue中element-ui 树形控件-树节点的选择(选中当前节点,获取当前id并且获取其父级id)...
  5. springboot和ssm的区别
  6. 我月薪3W,却不用熬夜加班做报表,这个养老工具,你一定要知道
  7. 十二、java知识点——类加载机制(硬货)
  8. 根据微信的公众号获取公众号的二维码 根据公众号获得二维码的图片
  9. php显示上一次登陆的时间长,cookie实现显示上次登录时间的问题
  10. win11配置jdk1.8环境变量
  11. linux openerp,openerp
  12. 使用Python绘制词云图片
  13. M システム - 笔记(4) -- 客户合作胜过合同谈判
  14. 适合公司用的电子邮箱哪家好?企业邮箱最全功能介绍~
  15. 3套精品像素字体打包下载
  16. noip c语言算法教学视频,信息学奥赛课课通(C++)课程视频课程课件与代码
  17. python学习:向Firebird数据库表中插入数据
  18. 计算机缺失Fmod.dll,fmodstudio.dll
  19. 四人小组项目(对项目进行的修改与重写)
  20. Ubuntu18.04离线安装网卡驱动、gcc、make等

热门文章

  1. channel源代码实现
  2. vm12制作的centos8虚拟机上搭建k8s一次实践
  3. 如何调用cmd.exe程序,并可以传递一些命令行参数
  4. c++ array容器 传参_香港城市大学支春义AEM:磷烯正极材料助力于高电压、抗自放电锌离子混合超级电容器...
  5. SpringData整合ElasticSearch
  6. 计算机rs485通讯,通过FX3U-485-BD实现PLC和计算机的RS485通信
  7. 一个AI PhD的毕业随感
  8. mongodb中常用的shell命令
  9. 网络电话变身情趣APP 体验通话更多乐趣
  10. HTML 基本概念梳理——涉及HTML简要发展史、基本标签