Transcript SSO_CAS

单点登录的学习
Garry Yu
1
© Red Hat, Inc. 2010
学习内容
• 什么是单点登录(SSO)?
•
CAS (Central Authentication Service)
• 搭建一个CAS应用
• CAS整合数据库验证
• CAS整合LVS的搭建
• 单点登出
2
什么是单点登录(SSO)
顾名思义,单点登录即只在一个地方登陆即可访问所
有同一范围内的系统。
SSO
桌面SSO
WEB-SSO
桌面SSO:桌面 SSO 体现在操作系统级别上
WEB-SSO:Web-SSO体现在客户端,SSO 应用之间使用 Web
协议(如HTTPS)
3
什么是单点登录(SSO)
SSO体系中的角色:
• User(多个)
• Web应用(多个)
• SSO认证中心(一个)
4
什么是单点登录(SSO)
SSO的实现原则:
• 所有的登录都在 SSO 认证中心进行。
• SSO 认证中心通过一些方法来告诉 Web 应用当前访问用
户究竟是不是通过认证的用户。
• SSO 认证中心和所有的 Web 应用建立一种信任关系。
5
CAS
CAS(Central Authentication Service)是Yale大学发起
的构建Web SSO的Java开源项目。
• CAS体系结构
 CAS Server:
负责完成对用户信息的认证,需要单独部署,CAS Server
会处理用户名 / 密码等凭证 (Credentials) 。
 CAS Client:
部署在客户端(即web应用的服务器),对请求方进行身份
认证,重定向到 CAS Server 进行认证。
6
CAS
user
database
service
app. #1
user
database
service
app. #2
app. #3
web browser
7
app. #1
app. #2
app. #3
web browser
authentication
server
CAS
用户验证
C AS
s erve r
CAS
server
H T TP S
HTTPS
•
w eb b ro w s er
web browser
8
aut hentica tio n fo rm :
CAS
•
CAS
server
用户验证
ser
base
HTTPS
user
TGC
database
netId
password
netId
password
HTTPS
CAS
server
web browser
TGC
TGC
• TGC: Ticket Granting Cookie
 用户访问CAS Server的证书
 一个私有的且保护的Cookie
 可重用的Ticket
web browser
9
TGC
CAS
验证通过后访问应用
ID
CAS
server
TGC
application
ST
HTTPS
•
ST
ST
web browser
10
• ST: Service Ticket
– 用户访问应用系统的证书
– 不可重用的Ticket
– 有效期非常短
TGC
CAS
•
没验证时访问应用
Authentication
form
HTTPS
CAS
server
web browser
11
application
CAS
没验证时访问应用
ID
CAS
server
TGC
netId
password
ST
ST
web browser
12
application
ST
HTTPS
•
TGC
搭建一个CAS应用
• 实验背景:
•
•
•
•
系统环境:Windows XP|SUN JDK1.6U4|Tomcat6.0.18|CAS
Server 3.4.2 + CAS Client 2.0.11
主机完整名称: 主机名
浏览器: IE8
下载地址:
CAS Server: http://www.jasig.org/cas/download
CAS Client: http://www.ja-sig.org/downloads/cas-clients/
13
搭建一个CAS应用
• 实验步骤:
1. 搭建java web服务器环境
2. 使用Java Keytool工具为系统生成HTTPS证书,并为系统
注册
3. 配置Tomcat的HTTPS服务
4. 给应用添加CAS过滤器
5. 部署CAS服务器
6. 测试最终部署结果
14
搭建一个CAS应用
1.搭建java web服务器环境
在这一步骤中主要注意的是能够通过
http://computorName:8080/访问tomcat
15
搭建一个CAS应用
2.使用Java Keytool工具为系统生成HTTPS证书
该步骤要注意的是创建证书时在名字与姓氏中输
入计算机全名,不能输入IP或localhost。两次输
入的密码必须相同。详细请查看《CAS解决方案
.doc》文档
16
搭建一个CAS应用
3.配置Tomcat的HTTPS服务
更改server.xml文件如下:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="C:/Documents and Settings/test01/.keystore"
truststoreFile="C:/Java/jdk1.6.0_04/jre/lib/security/cacerts"
keystorePass="changeit"/>
17
搭建一个CAS应用
4.给应用添加CAS过滤器
详细请参考《CAS解决方案.doc》
18
搭建一个CAS应用
5.部署CAS服务器
19
CAS整合数据库验证
1.首先在MYSQL中创建一个cas数据库并创建一个user表
CREATE TABLE `user` (
`ID` bigint(10) NOT NULL auto_increment,
`USERNAME` varchar(50) default NULL,
`PASSWORD` varchar(20) default NULL,
PRIMARY KEY (`ID`)) ENGINE=InnoDB AUTO_INCREMENT=2
DEFAULT CHARSET=gb2312;
INSERT INTO `user` VALUES ('1', 'garry', '123456');
20
CAS整合数据库验证
2.修改cas项目中的deployerConfigContext.xml文件
详细请参考《CAS解决方案.doc》
21
CAS整合数据库验证
3.加入依赖jar包
将cas-server-support-jdbc-3.4.2.jar和mysql-connectorjava-5.0.8-bin.jar加入/cas/WEB-INF/lib目录下即可
22
CAS整合LVS的搭建
将CAS服务器导
出的Tomcatsso.crt
文件复制到web应用
服务器中,并且使
用java keytool
将其导入到
%java_home%/
Jre/lib/security/
cacerts中
23
CAS整合LVS的搭建
• 重点
<filter>
<filter-name>CAS Filter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>https://test01:8443/cas/login </param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://test01:8443/cas/serviceValidate </param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>192.168.0.100:8080 </param-value>
</init-param>
</filter>
注意:红色部分必须为该应用系统的访问地址。请参考《 CAS解决方案.doc 》
24
单点登出
• 单点登出原理:
用户请求/cas/logout登出时同时销毁用户的Cookie和
session对象即可,CAS系统中默认的情况下只会销毁
Cookie。
• 自定义登出:
首先,开启登出后自动跳转的开关。即在casservlet.xml中,设置logoutController的
followServiceRedirects=true。
25
单点登出
<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“ />
其次是在每个应用系统下添加一个登出页面。代码如下:
<%@ page language="java" pageEncoding="gb2312"%>
<%
session.invalidate();//销毁当前session
%>
<script type="text/javascript">
var apphostname = window.location.hostname //当前系统的域名或IP地址
var appport = window.location.port; //当前系统的访问端口
//登出后重定向到系统登录页面
var callbackurl='?service=https%3A%2F%2F'+apphostname +'%3A'+appport + '%2Fapp1';
window.location='https://test01:8443/cas/logout'+callbackurl;
</script>
26
结束
谢谢!
27