使用CAS实现SSO简洁教程Word文档格式.docx
- 文档编号:21951909
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:23
- 大小:2.07MB
使用CAS实现SSO简洁教程Word文档格式.docx
《使用CAS实现SSO简洁教程Word文档格式.docx》由会员分享,可在线阅读,更多相关《使用CAS实现SSO简洁教程Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
列出本文档的所有参考文献(可以是非正式出版物),格式如下:
[标识符]作者,文献名称,出版单位(或归属单位),日期
大部分都是网络上查询的资料,很多,不列举了。
0.5术语与缩写解释
缩写、术语
解释
SSO
即Singlesignon/off,单点登录/退出
CAS
全称JA-SIGCentralAuthenticationService,实现SSO的开源项目
…
1.概述
1.1背景
单点登录是必须的,实现方式颇多,这里就说使用CAS的实现方式。
使用CAS实现SSO,网络上说明很多,大部分都是从制作证书开始,而实际上是可以不使用HTTPS验证,这样更方便。
单点登录的原理是通过拦截你设定的URL,并跳转到你指定的CASSERVER登录页,当你登录成功后,带着TICKET,返回到你打开的URL。
然后你就可以一票在手,畅通无阻。
网上有个家伙用旅游的套票来解释单点登录,非常形象。
当你到达一个旅游区门口,你可以买一个套票,套票规定你可以游览N个景点,进入这些景点的时候,你不需要再买票,也就实现了单点登录。
同时,也可以借用这个比喻说明一下单点注销。
当你打开一个应用A时,单击了注销按钮,跳转到http:
//hostname:
port/cas/logout或者https:
port/cas/logout,系统显示注销成功。
此时,IE窗口没有关闭,你继续打开应用A,仍然没有注销成功,不需要登录。
这就相当于你已经在旅游景点内,即使你把套票撕毁了,你仍然可以继续参观这个景点,不会把你驱逐出去。
但是,你再也进不了其它的景点了。
那么怎么实现立即生效的注销呢?
或者这种方式是否就满足我们的需求呢?
1.2环境
WindowsXP、JDK1.6.03、Tomcat6.0.20
注意:
配置好环境变量。
1.3下载资源
服务器端:
http:
//www.ja-sig.org/downloads/cas
当前最新版本是3.3.4,测试安装的版本为3.3.3
cas-server-3.3.3-release.zip
客户端:
https:
//www.ja-sig.org/svn/cas-clients/
cas-client-2.0.11.zipJAVA支持单点登录
cas-client-3.1.8-release.zipJAVA支持单点注销
dotnet-clientDOTNET支持类
phpcasPHP支持
同时要下载源代码,部分功能需要修改源代码,重新做包。
2.配置CASSERVER
CASSERVER目录介绍。
2.1简单配置
把你下载cas-server解压,进入cas-server-3.3\modules,复制cas-server-webapp-3.3.war到tomcat\webapps下,修改名称为cas.war,方便使用,原来的名字太长了。
然后启动IE,输入http:
//localhost:
8080/cas检验是否可以访问,如果可以,则输入相同的用户名和密码,比如cas/cas,测试是否能登录。
如果你对安全性要求不高且急不可待,这个时候就可以直接进行CASCLIENT的配置。
2.2数据库验证配置
简单配置后,可以使用相同的用户名和密码,进行登录。
这个不实际,可以通过配置实现连接自己的数据库进行配置。
这里有个前提,就是所有系统需要使用相同的用户表和密码加密方法,可以使用CAS自带的加密方法(\org\jasig\cas\authentication\handler\DefaultPasswordEncoder.class)或自己用JAVA写的加密方法。
进入目录tomcat\webapps\cas\WEB-INF,打开文件deployerConfigContext.xml,找到类似下面的代码:
cas-server根据版本不同,文件的路径或BEAN位置可能不同,逐个文件夹找下。
<
beanclass="
org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler"
/>
这是默认的方法。
同时还有两种可选,如下:
org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
>
<
propertyname="
dataSource"
ref="
casDataSource"
sql"
value="
selectpasswordfromtbUserwherelower(name)=lower(?
)"
/bean>
/************************************************************************/
org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"
abstract="
false"
lazy-init="
default"
autowire="
dependency-check="
<
<
tableUsers"
tbUser"
fieldUser"
u_userid"
/>
fieldPassword"
u_password"
passwordEncoder"
以上两种方式都经过测试。
另外,也可以写出自己的方法验证,修改BEAN的CLASS属性即可。
如果没有密码没有加密,则可以把参数<
去掉。
下面针对最下面的方法进行说明。
看它的属性,还需要定义两个BEAN,数据源和加密,如下:
beanid="
class="
mons.dbcp.BasicDataSource"
<
!
—SQLSERVER
driverClassName"
com.microsoft.sqlserver.jdbc.SQLServerDriver"
/property>
url"
jdbc:
sqlserver:
//10.7.3.90:
1433;
DatabaseName=itacc"
username"
zero"
password"
123456"
-->
--ORACLE
oracle.jdbc.driver.OracleDriver"
oracle:
thin:
@10.7.3.90:
1521:
orcl"
maxActive"
100"
maxIdle"
30"
maxWait"
500"
defaultAutoCommit"
true"
—加密
org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
byName"
constructor-argvalue="
MD5"
由于CAS-SERVER.WAR默认没有采用数据库加密,所以部分JAR包,没有引入,下面这些需要复制到webapps\cas\WEB-INF\lib里面:
Cas-server-support-jdbc-3.3.3.jar
Cas-server-support-ldap-3.3.3.jar
Commons-dbcp.jar
Commons-pool.jar
Org.springframework.jdbc-3.0.0.M4.jar//spring要根据自己的版本选择
Org.springframework.transaction-3.0.0.M4.jar
Sqljdbc.jar//数据库连接JAR,根据自己的复制
Oraclejdbc.jar
完成以后,用户表数据准备好后,可以运行http:
8080/cas进行登录测试。
这个时候很容易出现错误,多数是因为JAR包问题,注意查看tomcat\logs日志文件,进行检查,问题很容易解决。
2.3参数配置
这里只说明一下我涉及到的参数,可能有更多参数,目前还没有用到。
1、tomcat\webapps\cas\WEB-INF\deployerConfigContext.xml
org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:
httpClient-ref="
httpClient"
增加参数p:
requireSecure="
,是否需要安全验证,即HTTPS,false为不采用,加上去之后如下:
p:
2、Tomcat6.0\webapps\cas\WEB-INF\spring-configuration\
ticketGrantingTicketCookieGenerator.xml
ticketGrantingTicketCookieGenerator"
org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:
cookieSecure="
cookieMaxAge="
-1"
cookieName="
CASTGC"
cookiePath="
/cas"
参数p:
,同理为HTTPS验证相关,TRUE为采用HTTPS验证,与deployerConfigContext.xml的参数保持一致。
,简单说是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的IE窗口有效,IE关闭或重新打开其它窗口,仍会要求验证。
可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意IE窗口,都不需要验证。
warnCookieGenerator.xml
warnCookieGenerator"
CASPRIVACY"
两个参数与上面同理。
3、TICKET的生命周期也可以在web.xml加这个参数实现:
--Timeoutforgrantingtickets-->
context-param>
param-name>
edu.yale.its.tp.cas.grantingTimeout<
/param-name>
param-value>
7200<
/param-value>
/context-param>
2.4HTTPS验证配置
证书的制作使用keytool工具,进入CMD,输入keytool,回车测试,如果出现帮助,则说明环境变量配置正确,如果没有,则配置PATH,加入%JAVA_HOME%\BIN。
下面开始制作,先找好存放证书的位置:
(1)keytool-genkey-aliastomcatcas-keystoretomcatcas-keyalgRSA-validity3666
这一步是制作密钥库。
名字与姓氏要输入主机名或域名或localhost,不能随意输入。
密码为自己设定。
下面的密码直接回车。
(2)keytool-export-aliastomcatcas-keystoretomcatcas-filetomcatcas.crt
这一步是把密钥库导出为证书文件。
密码为上一步设定的密码。
(3)keytool-import-aliastomcatcas-filetomcatcas.crt
-keystore%JAVA_HOME%/jre/lib/security/cacerts
这一步是把证书导入TOMCAT。
后面的路径为TOMCAT使用的JRE路径,JDK1.6安装有两个目录JDK1.6和JRE1.6,TOMCAT6.0只要JRE1.6即可,通常在安装时,也都是默认到JRE1.6,这时要输入%JRE_HOME%\lib\security\cacerts,这个地方必须要确认准确。
注意:
这里需要输入密码,此密码不是前面设定的密码,是系统默认的密码changeit
(4)配置tomcat6.0\conf\server.xml
--
Connectorport="
8443"
protocol="
HTTP/1.1"
SSLEnabled="
maxThreads="
150"
scheme="
https"
secure="
clientAuth="
sslProtocol="
TLS"
加入密钥库文件和密码(前面设定的密码),修改为
keystoreFile="
d:
\data\tomcatcas.keystore"
keystorePass="
密钥库文件的要放到安全的位置,不能被随意移动。
完成后,可重启TOMCAT,进行测试。
2.5自定义页面
CAS页面文件放在Tomcat6.0\webapps\cas\WEB-INF\view\jsp中,页面配置文件在Tomcat6.0\webapps\cas\WEB-INF\classes中,比如default_views.properties,在这里指定登录用哪个页面,注销用哪个页面等等。
在Tomcat6.0\webapps\cas\WEB-INF\cas.properties文件指定使用哪个皮肤页面。
下面开始操作:
1、进入Tomcat6.0\webapps\cas\WEB-INF\view\jsp,复制default文件夹,并改名,再复制回来,如myth。
2、进入Tomcat6.0\webapps\cas\WEB-INF\classes,复制default_views.properties,并改名再复制回来,如myth_views.properties。
打开文件,把里面的目录..\jsp\default\ui修改为自己的路径,如..\jsp\myth\ui。
3、进入Tomcat6.0\webapps\cas\WEB-INF,打开cas.properties文件,修改
cas.viewResolver.basename=myth_views
完成以上3步后,打开IE,进入http:
8080/cas进行测试,如果成功则进行下一步。
文件中logout使用的类。
4、修改页面样式
最后一点说明,Tomcat6.0\webapps\cas\WEB-INF\cas-server.xml中,有个BEAN:
viewResolver"
org.springframework.web.servlet.view.ResourceBundleViewResolver"
order="
0"
basenames"
list>
value>
${cas.viewResolver.basename}<
/value>
protocol_views<
/list>
这个不要修改,否则出现httpcode500forurl。
3.配置JAVACLIENT
3.1HTTPS验证
1、把casclient.jar、cas-client-3.1.8.jar复制到你的jsp工程的WEB-INF\lib里;
2、修改web.xml,增加下面的代码:
--用于单点退出-->
listener>
listener-class>
org.jasig.cas.client.session.SingleSignOutHttpSessionListener<
/listener-class>
/listener>
filter>
filter-name>
CASSingleSignOutFilter<
/filter-name>
filter-class>
org.jasig.cas.client.session.SingleSignOutFilter<
/filter-class>
/filter>
--用于单点登录-->
CASFilter<
edu.yale.its.tp.cas.client.filter.CASFilter<
—下面两个为验证地址,即casserver的地址,如果使用https验证,地址为https:
8443字样-->
init-param>
edu.yale.its.tp.cas.client.filter.loginUrl<
:
8080/cas/login<
/init-param>
edu.yale.its.tp.cas.client.filter.validateUrl<
8080/cas/serviceValidate<
—本工程的URL,被拦截的地址-->
edu.yale.its.tp.cas.client.filter.serverName<
localhost:
8080<
filter-mapping>
url-pattern>
/*<
/url-pattern>
/filter-mapping>
3、在页面获得验证返回的用户
用户可以通过以下方式,从JSP或servlet中获取通过认证的用户名:
Stringusername=(String)session.getAttribute(edu.yale.it
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 CAS 实现 SSO 简洁 教程
![提示](https://static.bdocx.com/images/bang_tan.gif)