CAS的官网:http://www.jasig.org/cas

CAS Server wiki:https://wiki.jasig.org/display/CASUM/Home

CAS Client wiki:https://wiki.jasig.org/display/CASC/Home

http://blog.csdn.net/haydenwang8287/article/details/5765941

http://www.micmiu.com/enterprise-app/sso/sso-cas-sample/

http://yuzhwe.iteye.com/blog/830143  获取更多用户信息

http://www.doc88.com/p-598933477220.html

http://toplchx.iteye.com/blog/1013001cas 与spring security整合

CAS 基础配置

1JDK环境变量设置

2 安全证书配置

3 部署CAS-Server相关的Tomcat

4 部署CAS-Client相关的Tomcat

5 不使用HTTPS配置

6 Client端获取Server 登陆信息

7 Clinet 获取更多用户信息配置

1 环境变量

set JAVA_HOME=D:\sso\jdk1.6.0_13
set TOMCAT_HOME=D:\sso\cas-apache-tomcat-6.0.35

2 证书配置

1 创建

keytool -genkey -alias zendai -keyalg RSA -keysize 1024 -keypass changeit -validity 365 -keystore d:\sso\zendai.keystore -storepass changeit

  姓氏:uc.zendai.com  (要与访问cas server域名相同,非常重要)

  单位名称:zendai.com

  组织名:zendai

  城市:SH

  身份:SH

  国家:CN

2 导出

keytool -export -alias zendai -keystore d:\sso\zendai.keystore -file d:\sso\zendai.crt -storepass changeit

3 删除

keytool -delete -alias zendai -keystore D:\j2ee\jdk1.6.0_30\jre\lib\security\cacerts

pwd:changeit

4 导入

keytool -import -keystore D:\j2ee\jdk1.6.0_30\jre\lib\security\cacerts -file d:\sso\zendai.crt -alias zendai

pwd:changeit

5 查看所有证书

keytool -list -keystore D:\j2ee\jdk1.6.0_30\jre\lib\security\cacerts

pwd:changeit

注意:

CAS 证书制作经常容易出 PKIX path building failed:报错

解决方法:

1 检查导入的JDK是否是系统环境变量默认的JDK。

2 检查设置环境变量的JDK证书是否导入.

3 证书导入成功确认后,确认CAS SERVER 8443路径认证的 证书是否与导入的证书一致.

3 Server 端

CAS的官网:http://www.jasig.org/cas 下载Server 端和Client端

修改 tomcat conf server.xml

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="keystore/ssodemo.keystore" keystorePass="michaelpwd"
clientAuth="false" sslProtocol="TLS" URIEncoding="UTF-8" />

4 Client端

client端 加入 cas-core-client.jar,common-logger.jar 后修改web.xml

<!-- ======================== 单点登录开始 ======================== -->

<!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->

<listener>

<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>

</listener>

<!-- 该过滤器用于实现单点登出功能,可选配置。 -->

<filter>

<filter-name>CAS Single Sign Out Filter</filter-name>

<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>CAS Single Sign Out Filter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<filter>

<filter-name>CAS Filter</filter-name>

<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>

<init-param>

<param-name>casServerLoginUrl</param-name>

<param-value>https://demo.micmiu.com:8443/cas-server/login</param-value>

</init-param>

<init-param>

<param-name>serverName</param-name>

<param-value>http://app1.micmiu.com:8888</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>CAS Filter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->

<filter>

<filter-name>CAS Validation Filter</filter-name>

<filter-class>

org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
</filter-class>

<init-param>

<param-name>casServerUrlPrefix</param-name>

<param-value>https://demo.micmiu.com:8443/cas-server</param-value>

</init-param>

<init-param>

<param-name>serverName</param-name>

<param-value>http://app1.micmiu.com:8888</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>CAS Validation Filter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->

<filter>

<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>

<filter-class>

org.jasig.cas.client.util.HttpServletRequestWrapperFilter
</filter-class>

</filter>

<filter-mapping>

<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 -->

<filter>

<filter-name>CAS Assertion Thread Local Filter</filter-name>

<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>CAS Assertion Thread Local Filter</filter-name>

<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- ======================== 单点登录结束 ======================== -->

CAS 动态登陆认证

1  复制所需的类库到web应用下,如下二个jar包。

cas-server-support-jdbc-3.1.1.jar

2 配置cas/WEB-INF/目录下的deployerConfigContext.xml 文件。

注释掉 <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />

增加数据源<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">

<property name="driverClassName"><value>oracle.jdbc.driver.OracleDriver</value></property>

<property name="url"><value>jdbc:oracle:thin:@localhost:1521:oracle</value></property>

<property name="username"><value>foundation</value></property>

<property name="password"><value>foundation</value></property>

  // <property name="passwordEncoder" ref="MD5PasswordEncoder"/>

</bean>

3 改变认证方式

<bean  class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
变为数据库认证方式:

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
        <property name="sql" value="select password from app_user where username=?" />
      <property name="dataSource" ref="dataSource" />
</bean>

4 添加解密方式

<bean id="MD5PasswordEncoder"class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">  
        <constructor-arg index="0">
                <value>MD5</value>
        </constructor-arg>
</bean>

5 不使用HTTPS证书配置

1、tomcat/webapps/cas/WEB-INF/deployerConfigContext.xml

<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"

p:httpClient-ref="httpClient"/>

增加参数p:requireSecure="false",是否需要安全验证,即HTTPS,false为不采用,加上去之后如下:

<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"

p:httpClient-ref="httpClient"  p:requireSecure="false"/>

2、Tomcat 6.0/webapps/cas/WEB-INF/spring-configuration/

ticketGrantingTicketCookieGenerator.xml

<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"

p:cookieSecure="true"

p:cookieMaxAge="-1"

p:cookieName="CASTGC"

p:cookiePath="/cas" />

参数p:cookieSecure="true",同理为HTTPS验证相关,TRUE为采用HTTPS验证,与deployerConfigContext.xml的参数保持一致。

参数p:cookieMaxAge="-1",简单说是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的IE窗口有效,IE关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意IE窗口,都不需要验证。

warnCookieGenerator.xml

<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"

p:cookieSecure="true"

p:cookieMaxAge="-1"

p:cookieName="CASPRIVACY"

p:cookiePath="/cas" />

两个参数与上面同理。

3、TICKET的生命周期也可以在web.xml加这个参数实现:

<!-- Timeout for granting tickets -->

<context-param>

<param-name>edu.yale.its.tp.cas.grantingTimeout</param-name>

<param-value>7200</param-value>

</context-param>

6 Client获取Server登陆信息

Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
AttributePrincipal principal = assertion.getPrincipal();

7 获取更多用户信息配置

<!-- 在这里配置获取更多的信息 --> 
<bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao"> 
<constructor-arg index="0" ref="dataSource" /> 
<constructor-arg index="1" value="select U_id as UId,U_type as UType,U_email as UEmail from t_user where U_username=?" /> 
<property name="queryAttributeMapping"> 
<map> 
<entry key="username" value="uid"/><!-- 这里必须这么写,系统会自己匹配。 --> 
</map> 
</property> 
<!-- 要获取的属性在这里配置 --> 
<property name="resultAttributeMapping"> 
<map> 
<entry key="UId" value="U_id" /> 
<entry key="UType" value="U_type" /> 
<entry key="UEmail" value="U_email" /> 
</map> 
</property> 
</bean>

在客户端获取信息

AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();

String loginName = principal.getName();//获取用户名

Map<String, Object> attributes = principal.getAttributes();

if(attributes != null) {

System.out.println(attributes.get("U_id"));

System.out.println(attributes.get("U_type"));

System.out.println(attributes.get("U_email"));

}

CAS验证流程:

1.用户浏览受系统保护的URL。

2.CAS Client服务端收到请求,Filter拦截该请求,在Filter中判断该用户是否已经登陆,如果已经登陆,就直接进入系统,否则,将请求转发到CAS Server服务端的LoginURL。

3.在LoginURL中会获取到用户的Cookie,检验用户是否已经在其他相关使用SSO的系统登陆成功。如果已经在其他的系统登陆了,则将请求转回CAS Client,并且带回一个ticket, CAS Client再次发送请求到ValidateURL。否则,系统提示用户输入ID和PASSWORD。

4. 提交后请求到ValidateURL,CAS Server验证ticket的有效性。然后返回结果给CAS Client。如果ticket有效,则CAS Client应让该用户浏览受保护的资源。否则,重定向到登陆页面,提示用户输入ID和PASSWORD。

5. 校验ID和Password是否匹配。如不匹配,再次要求用户输入ID和PASSWORD。否则,CAS Server记录用户登陆成功。并向浏览器回送Cookie,记录用户已经登陆成功。如果浏览器不支持Cookie,则无法实现单点登陆。

转载于:https://www.cnblogs.com/adolfmc/archive/2012/07/23/2604303.html

SSO CAS 探究相关推荐

  1. [精华][推荐]SSO CAS单点登录框架学习 搭建详细步骤及源码

    1.了解单点登录  SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...

  2. Liferay SSO CAS 集成

    一.配置Tomcat,启用SSL协议. 1.在CAS要安装的机器上(也就是服务端)为Tomcat生成用于SSL通讯的密钥:keytool -genkey -alias tomcat -keyalg R ...

  3. SSO CAS 单点系列

    在多系统应用群中,使用,例如,用户账户管理,用户应该有一个统一的账户,不应该让用户在每个子系统分别注册 登陆再分别登出.这就是我们所说的单点登陆问题,即SSO: SSO问题,时大中型web应用经常碰到 ...

  4. SSO(CAS) 的简单搭建与使用

    ​cas 就是统一认证,实现一个系统登录,其他系统也不用登录,一个系统退出,其他系统也一起退出. 1.列出证书 2.如果有证书删除证书 3.创建密钥 4.创建证书 5.导入证书 6.如果第一次创建证书 ...

  5. cas java web,CAS干单点登陆(SSO)——集成Java Web 项目

    在应用WEB-INF/web.xml添加filter的内容,效果如下所示 org.jasig.cas.client.session.SingleSignOutHttpSessionListener C ...

  6. 单点登录(SSO)、CAS介绍

    1.引言 1.1 编写目的 记录使用CAS实现SSO的过程. 1.2 术语定义 CAS: 全称JA-SIG Central Authentication Service,实现SSO的开源项目. SSO ...

  7. 美团面试官:说说什么是单点登录?什么是SSO?什么是CAS

    哈喽,各位新来的小伙伴们,大家好!由于公众号做了改版,为了保证公众号的资源能准时推送到你手里,大家记得将咱们的公众号 加星标置顶 ,在此真诚的表示感谢~ 正文如下: 单点登录简介 单点登录(Singl ...

  8. 什么是单点登录?什么是SSO?什么是CAS?

    单点登录学习笔记: 单点登录简介 SSO&CAS是什么 单点登录适合什么场景 单点登录的三种实现方式 CAS的几个重要知识点 CAS的实现过程

  9. JBoss Portal CAS 的配置

    一.修改 portal-server.war/WEB-INF/context.xml 中的代码,如下: 1<Valve  className="org.jboss.portal.ide ...

最新文章

  1. C语言实现linear search线性搜索算法(附完整源码)
  2. C语言实例 区分旅客国籍
  3. Docker的save和export命令的区别
  4. 使用 Java API 操作 HBase
  5. Three.js贴图效果一览
  6. python螺旋输出矩阵_Python实现打印螺旋矩阵功能的方法
  7. win10 如何做到 C盘 的绝对干净,所有软件都安装到D盘,C盘只用来存操作系统。
  8. 二十三、小程序中的三级下拉框(下拉菜单)
  9. oracle列转行用法,oracle 行转列 列转行
  10. gxworks2使用指令手册_GX Works2操作手册(智能功能功能模块操作篇):三菱 GX 三菱 GX Works2操作手册(智能功能功能模块操作篇)...
  11. 蓝牙Controller框架梳理
  12. 选购新风机的关键知识点
  13. Shiro(三) Shiro核心原理分析
  14. Java正则表达式的语法与示例
  15. PPT修改幻灯片大小
  16. 《BackTrack 5 Cookbook中文版——渗透测试实用技巧荟萃》目录—导读
  17. flex布局写一个永动机~
  18. plsql中执行SELECT current_date FROM dual,为什么获取的时间不正确?获取的不是我本地的时间
  19. 浅尝辄止MongoDB:GridFS
  20. jmeter基础操作,图文

热门文章

  1. java jvm调优面试题_【Java面试题第一期】有没有jvm调优经验?调优方案有哪些?...
  2. wifi 7都来了?
  3. 课时 24:Kubernetes API 编程利器:Operator 和 Operator Framework(夙兴)
  4. springboot 获取配置文件中的值_Spring Boot面试必问(亲测)
  5. 字符串静态顺序结构C/C++实现(数据结构严蔚敏版)
  6. wireshark合并多个文件_小技巧:快速合并多个excel文件(收藏版)
  7. 教你如何用python表白_情人节来了,教你个用 Python 表白的技巧
  8. C++:MFC SetTimer定时执行某一函数;
  9. opencv清晰度,色偏等评价函数
  10. 【杂谈】循序渐进,有三AI不得不看的技术综述(超过100篇核心干货)