跑不起来的程序都是骗人的!
一、引言
CAS (Central Authentication Service) 是耶鲁 Yale 大学发起的一个Java开源项目,旨在为 Web应用系统提供一种可靠的 单点登录 解决方案( Web SSO ), CAS 具有以下特点:
1、 开源的企业级单点登录解决方案;
2、 CAS Server 为需要独立部署的 Web 应用----一个独立的Web应用程序(cas.war)。 ;
3、 CAS Client 支持非常多的客户端 ( 指单点登录系统中的各个 Web 应用 ) ,包括 Java, .Net,PHP, Perl, 等。
CAS在2004年12月成为Jasig项目,所以也叫JA-SIG CAS。
官网1:https://apereo.github.io/cas/5.0.x/index.html
官网2:https://www.apereo.org/projects/cas/about-cas
论坛:http://jasig.275507.n4.nabble.com/Jasig-CAS-f275508.html
github:https://github.com/apereo/cas
开发者快捷资源:http://developer.jasig.org/
下载链接:https://www.apereo.org/projects/cas/download-cas
开发文档:https://apereo.github.io/cas/4.2.x/installation/Configuring-Authentication-Components.html#
CAS 原理
从结构上看, CAS 包含两个部分: CAS Server 和 CAS Client 。
CAS Server
CAS Server 需要独立部署,主要负责对用户的认证工作, 它会处理用户名 / 密码等凭证 (Credentials) ;
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 Server 进行认证 。
CAS Client 负责部署在客户端(注意,我是指 Web 应用),原则上, CAS Client 的部署意味着,当有对本地 Web 应用的受保护资源的访问请求,并且需要对请求方进行身份认证, Web 应用不再接受任何的用户名密码等类似的 Credentials ,而是重定向到 CAS Server 进行认证。
目前, CAS Client 支持(某些在完善中)非常多的客户端,包括 Java 、 .Net 、 ISAPI 、 Php 、 Perl 、 uPortal 、 Acegi 、 Ruby 、 VBScript 等客户端,几乎可以这样说, CAS 协议能够适合任何语言编写的客户端应用。
CAS相关词汇和概念
TGC(ticket-granting cookie)-- ------- 授权的票据证明,由 CAS Server 通过 SSL 方式发送给终端用户;
KDC( Key Distribution Center ) ---------- 密钥发放中心;
ST (Service ticket) --------- 服务票据, 由 KDC 的 TGS 发放, ST 只能被尝试验证一次。 任何一台 Workstation 都需要拥有一张有效的 Service Ticket 才能访问域内部的应用 (Applications) 。 如果能正确接收 Service Ticket ,说明在 CASClient-CASServer 之间的信任关系已经被正确建立起来,通常为一张数字加密的证书;
Ticket Granting tieckt(TGT) --------- 票据授权票据,由 KDC 的 AS 发放。即获取这样一张票据后,以后申请各种其他服务票据 (ST) 便不必再向 KDC 提交 Credentials (凭证或身份认证信息 ) ;
Authentication Service (AS) --------- 认证服务,索取 Crendential ,发放 TGT ;
Ticket-Granting Service (TGS) --------- 票据授权服务,索取 TGT ,发放 ST 。
基础环境:
casServer jdk7 tomcat8以上
casClient jdk7 tomcat7
关键步骤:
1、证书生成及添加
2、tomcat https配置
3、服务端代码下载及配置
4、客户端代码下载及配置
二、证书生成及添加
服务端生成数字证书的命令
keytool -genkey -keystore "D:\cas\wo_cas.keystore" -alias "wo_cas" -keyalg "RSA" -validity 36500 -dname "CN=localhost, OU=org, O=org.cj, L=南京, ST=江苏, C=中国" -keypass "wo_cas" -storepass "wo_cas"
服务端导出cer证书文件的命令
keytool -alias "wo_cas" -exportcert -keystore "D:\cas\wo_cas.keystore" -file "D:\cas-chenjie\wo_cas.cer" -storepass "wo_cas"
客户端JRE中导入服务端cer证书的命令
keytool -import -alias "wo_cas" -keystore "D:\Program Files\Java\jdk1.8.0_91\jre\lib\security\cacerts" -file "D:\cas\wo_cas.cer" -trustcacerts -storepass changeit
删除证书
keytool -delete -alias "wo_cas" -keystore "D:\Program Files\Java\jdk1.8.0_91\jre\lib\security\cacerts"
三、Tomcat https配置
注意:路径和密码
1、服务端代码下载及配置
代码下载
https://github.com/watemei/casServer
建库(mysql)
创建dbname 为cas
导入doc/cas.sql文件
eclipse中设置tomcat
修改配置文件deployerConfigContext.xml
数据库连接
启动tomcat
输入https:localhost:8090/casServer
输入cj cj 登录成功
2、客户端代码下载及配置
https://github.com/watemei/casClient
修改web.xml
启动casClient1
首次访问 跳转到casServer输入cj cj登录
登录成功跳转回casClient
请求casClient
http://localhost:8080/casClient/demo/test
3、跨应用授权
启动casClient2
请求http://localhost:8080/casClient2
四、验证码配置
maven包引入
web.xml配置
创建类:
login-webflow.xml配置
cas-servlet.xml配置
注意:包路径和类名必须一致,否则报异常
五、cas部署问题汇总
往期文章:
阿里巴巴 Java 开发手册
阿里巴巴 Java 开发手册学习1-命名规范
阿里巴巴 Java 开发手册学习2-常量定义、格式约束
阿里巴巴 Java 开发手册学习3-OOP规约
阿里巴巴 Java 开发手册学习4- 集合处理
阿里巴巴 Java 开发手册学习5-并发编程、控制语句、注释规约
阿里巴巴 Java 开发手册学习6-异常日志
阿里巴巴 Java 开发手册学习7-Mysql规约
阿里巴巴 Java 开发手册学习8-Sql规约、ORM 规约
阿里巴巴 Java 开发手册学习9-工程规约、服务器规约、安全规约