使用CAS实现SSO.
目 录
0. 文档介绍... 2
0.1 文档目的... 2
0.2 文档范围... 2
0.3 读者对象... 2
0.4 参考文献... 2
0.5 术语与缩写解释... 2
1. 概述... 3
1.1背景... 3
1.2环境... 3
1.3下载资源... 3
2. 配置CAS SERVER.. 4
2.1简单配置... 4
2.2数据库验证配置... 5
2.3参数配置... 8
2.4HTTPS验证配置... 10
2.5自定义页面... 14
3. 配置JAVA CLIENT. 17
3.1HTTPS验证... 17
3.2HTTP验证... 19
4. 配置DOTNET CLIENT. 20
5. 配置PHP CLIENT. 24
6. 如何实现单点注销... 24
0. 文档介绍
0.1 文档目的
0.2 文档范围
0.3 读者对象
0.4 参考文献
提示:列出本文档的所有参考文献(可以是非正式出版物),格式如下:
0.5 术语与缩写解释
缩写、术语 |
解 释 |
SSO |
即Single sign on/off,单点登录/退出 |
CAS |
全称JA-SIG Central Authentication Service,实现SSO的开源项目 |
… |
1. 概述
1.1背景
单点登录是必须的,实现方式颇多,这里就说使用CAS的实现方式。使用CAS实现SSO,网络上说明很多,大部分都是从制作证书开始,而实际上是可以不使用HTTPS验证,这样更方便。
单点登录的原理是通过拦截你设定的URL,并跳转到你指定的CAS SERVER登录页,当你登录成功后,带着TICKET,返回到你打开的URL。然后你就可以一票在手,畅通无阻。
网上有个家伙用旅游的套票来解释单点登录,非常形象。当你到达一个旅游区门口,你可以买一个套票,套票规定你可以游览N个景点,进入这些景点的时候,你不需要再买票,也就实现了单点登录。
那么怎么实现立即生效的注销呢?或者这种方式是否就满足我们的需求呢?
1.2环境
Windows XP、JDK1.6.03、Tomcat6.0.20
1.3下载资源
服务器端:http://www.ja-sig.org/downloads/cas
客户端:https://www.ja-sig.org/svn/cas-clients/
cas-client-2.0.11.zip JAVA支持单点登录
cas-client-3.1.8-release.zip JAVA支持单点注销
2. 配置CAS SERVER
2.1简单配置
如果你对安全性要求不高且急不可待,这个时候就可以直接进行CAS CLIENT的配置。
2.2数据库验证配置
进入目录tomcat/webapps/cas/WEB-INF,打开文件deployerConfigContext.xml,找到类似下面的代码:
注意:cas-server根据版本不同,文件的路径或BEAN位置可能不同,逐个文件夹找下。
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="casDataSource" />
<property name="sql" value="select password from tbUser where lower(name) = lower(?)" />
/************************************************************************/
<bean class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"
abstract="false" lazy-init="default" autowire="default" dependency-check="default">
<property name="dataSource" ref="casDataSource" />
<property name="tableUsers" value="tbUser" />
<property name="fieldUser" value="u_userid"/>
<property name="fieldPassword" value="u_password"/>
<property name="passwordEncoder" ref="passwordEncoder"/>
<bean id="casDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property>
<property name="url" value="jdbc:sqlserver://10.7.3.90:1433;DatabaseName=itacc"></property>
<property name="username" value="zero" />
<property name="password" value="123456" />
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@10.7.3.90:1521:orcl"></property>
<property name="username" value="zero"></property>
<property name="password" value="123456"></property>
<property name="maxActive" value="100"></property>
<property name="maxIdle" value="30"></property>
<property name="maxWait" value="500"></property>
<property name="defaultAutoCommit" value="true"></property>
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">
<constructor-arg value="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
Org.springframework.jdbc-3.0.0.M4.jar //spring要根据自己的版本选择
Org.springframework.transaction-3.0.0.M4.jar
Sqljdbc.jar //数据库连接JAR,根据自己的复制
2.3参数配置
这里只说明一下我涉及到的参数,可能有更多参数,目前还没有用到。
1、tomcat/webapps/cas/WEB-INF/deployerConfigContext.xml
p:httpClient-ref="httpClient"/>
增加参数p:requireSecure="false",是否需要安全验证,即HTTPS,false为不采用,加上去之后如下:
p:httpClient-ref="httpClient" p:requireSecure="false"/>
2、Tomcat 6.0/webapps/cas/WEB-INF/spring-configuration/
ticketGrantingTicketCookieGenerator.xml
参数p:cookieSecure="true",同理为HTTPS验证相关,TRUE为采用HTTPS验证,与deployerConfigContext.xml的参数保持一致。
<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
3、TICKET的生命周期也可以在web.xml加这个参数实现:
<!-- Timeout for granting tickets -->
<param-name>edu.yale.its.tp.cas.grantingTimeout</param-name>
<param-value>7200</param-value>
2.4HTTPS验证配置
证书的制作使用keytool工具,进入CMD,输入keytool,回车测试,如果出现帮助,则说明环境变量配置正确,如果没有,则配置PATH,加入%JAVA_HOME%/BIN。
(1) keytool -genkey -alias tomcatcas -keystore tomcatcas -keyalg RSA -validity 3666
注意:名字与姓氏要输入主机名或域名或localhost,不能随意输入。密码为自己设定。下面的密码直接回车。
(2)keytool -export -alias tomcatcas -keystore tomcatcas -file tomcatcas.crt
(3)keytool -import -alias tomcatcas -file tomcatcas.crt
-keystore %JAVA_HOME%/jre/lib/security/cacerts
注意:这里需要输入密码,此密码不是前面设定的密码,是系统默认的密码changeit
(4)配置tomcat6.0/conf/server.xml
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="d:/data/tomcatcas.keystore"
2.5自定义页面
在Tomcat 6.0/webapps/cas/WEB-INF/cas.properties文件指定使用哪个皮肤页面。
1、进入Tomcat 6.0/webapps/cas/WEB-INF/view/jsp,复制default文件夹,并改名,再复制回来,如myth。
3、进入Tomcat 6.0/webapps/cas/WEB-INF,打开cas.properties文件,修改
cas.viewResolver.basename=myth_views
完成以上3步后,打开IE,进入http://localhost:8080/cas进行测试,如果成功则进行下一步。
最后一点说明,Tomcat 6.0/webapps/cas/WEB-INF/cas-server.xml中,有个BEAN:
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"
<value>${cas.viewResolver.basename}</value>
这个不要修改,否则出现http code 500 for url 。
3. 配置JAVA CLIENT
3.1HTTPS验证
1、把casclient.jar、cas-client-3.1.8.jar复制到你的jsp工程的WEB-INF/lib里;
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
<filter-name>CAS Filter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<!—下面两个为验证地址,即cas server的地址,如果使用https验证,地址为https://hostname:8443字样- ->
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>http://c7.byd.com:8080/cas/login</param-value>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>http://c7.byd.com:8080/cas/serviceValidate</param-value>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>localhost:8080</param-value>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-name>CAS Filter</filter-name>
用户可以通过以下方式,从JSP或servlet中获取通过认证的用户名:
获得更完整的受认证用户信息对象CASReceipt Java Bean,可以使用以下语句:
完成以上后,进行测试。出现错误时,请查看tomcat/logs文件解决。
3.2HTTP验证
4. 配置DOTNET CLIENT
1、把DotNetCasClient.cs复制到DotNet项目
2、新建loginPage.aspx,Page_Load加入代码
String userId = client.Authenticate(Request, Response, false);
Session[DotNetCASClient.SessionHandle.getUserSession()] = userId;
FormsAuthentication.RedirectFromLoginPage(userId, false);
注意:FormsAuthentication.RedirectFromLoginPage这个方法。
3、在Default.aspx的Page_Load内加入获得用户的代码:
<?xml version="1.0" encoding="utf-8"?>
<add key="casLoginURL" value="http://c7.byd.com:8080/cas/login" />
<add key="casValidateURL" value="http://c7.byd.com:8080/cas/serviceValidate" />
<add key="serviceURL" value="http://localhost/dq/Default.aspx" />
<authentication mode="Forms" >
<forms name="casauth" loginUrl="loginPage.aspx" />
5. 配置PHP CLIENT
6. 如何实现单点注销
使用CAS实现SSO.相关推荐
- 学习CAS实现SSO单点登录
学习CAS实现SSO单点登录 网上找了几篇比较详细的教程,在这记录一下: 原理: CAS实现SSO单点登录原理 教程: 1.CAS实现单点登录(SSO)经典完整教程 2.SSO之CAS单点登录实例演示 ...
- 基于CAS实现SSO单点登录
点击关注公众号,实用技术文章及时了解 1. 概述 1.1. 什么是SSO? 单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使 ...
- biee java_转:BIEE11g 集成开源CAS实现SSO
转:http://blog.csdn.net/lele5000/article/details/7884268 有关CAS及SSO的原理,请看以下文章: ----20120824更新开始------- ...
- java sso教程_使用CAS实现SSO简洁教程
来源:互联网 SSO 即Single sign on/off,单点登录/退出 CAS 全称JA-SIG Central Authentication Service,实现SSO的开源项目 1. 概述 ...
- CAS实现SSO单点登录原理介绍
一.结构体系 从结构体系看, CAS 包括两部分: CAS Server 和 CAS Client . 1. CAS Server CAS Server 负责完成对用户的认证工作 , 需要独立部署 , ...
- 框架CAS实现SSO单点登录功能
1. 概述 1.1. 什么是SSO? 单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要 登录一 ...
- Liferay门户与CAS实现SSO单点登录
http://blog.csdn.net/yang_19790212/article/details/6635778 1.1 准备工作 1.1.1 安装JDK1.6.0.20 JAVA 1.6.0以 ...
- 使用CAS部署SSO服务的简单实现
系统: CentOS release 6.4 JDK: 1.6.0_21-b06 Tomcat: 6.0.0.29 cas-server: 3.5.2 cas-client: 3.2.1 一.创建证书 ...
- spring + shiro + cas 实现sso单点登录
sso-shiro-cas spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次,项目源码 系统模块说明 cas: 单点登录模块,这里直接拿的是cas的项目改了点样 ...
最新文章
- R语言绘制堆叠的环状条形图
- 学习一下rails hash 的方法
- Facebook Docusaurus 中文文档 自定义页面
- VS.NET C#视频教学
- 京东技术全景图首次展示 四大重磅智能技术驱动产业未来
- vForum 2011 Beijing现场图文播报三 动手实验营
- Mysqldump: Got Errno 32 On Write 和ambiguous redirect错误的解决办法
- “npm ERR! code ELIFECYCLE npm ERR! errno 1”问题
- animation 循环_汽车前照灯与前雾灯热循环试验
- ubuntu18.04系统下使用锐捷校园网两种方法:锐捷客户端登陆和Mentohust登陆方法
- 英文环境中Wine微信不能显示中文
- 可能是世界上最快、最先进的密码恢复程序!
- 关于Unity 接入VR镜头的设置
- WPS实现公式居中同时编号对齐
- comms-logging 输出级别设置
- linux_study_1
- 强化学习--蒙特卡洛法
- 从双钻模型看产品规划
- 开机总是进行磁盘检查
- 项目管理四个核心要素