单点登录:
SSO:表示在一处登录,就能无需登录访问的其他相关系统。
SSO:
认证中心
用户与账号系统、用户数据接口
客户端模块
令牌(Token)
个人理解SSO流程图:
个人理解的CAS流程图:
使用CAS单点登录实战:
1.
下载-CAS服务端:
https://github.com/Jasig/cas/releases/tag/v4.0.0
下载-CAS客户端包:
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>3.2.1</version>
</dependency>
2.
解压缩cas-server-4.0.0 jar包 ,将modules文件夹下的cas-server-webapp-4.0.0.war拷贝到D:\apache-tomcat-7.0.54\webapps目录下,改名为cas.war(只是为了方便URL输入),并启动Tomcat, 会自动解压得到cas工程文件夹。
好了,现在打开浏览器,输入http://localhost:8080/cas/login,弹出Log In Successful表示成功。
3.
CAS客户端配置
<!-- ======================== 单点登录开始 ======================== -->
<!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->
<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>CASFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>http://domainA:8080/cas/login</param-value>
<!--这里的server是服务端的IP -->
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:8088</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</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>http://domainA:8080/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:8088</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>
<!-- ======================== 单点登录结束 ======================== -->
注:
a casServerLoginUrl 参数的值是cas 服务器login 接口的值。web 应用里的cas client 在认证的时候会redirect到 cas 服务器,redirect 的url 就是casServerLoginUrl ,因为是redirect ,所以浏览器所在机器要配置cas 服务器的域名。
b casServerUrlPrefix 参数的值是cas 服务的访问地址。cas client 验证ticket 的时候,要访问cas 服务的/serviceValidate 接口,使用的url 就是${ casServerUrlPrefix }serviceValidate ,因为客户web 应用要验证cas的证书,所以证书cn 字段的值必须和casServerUrlPrefix 里设置的cas 服务器的域名保持一致,并且在web 应用的服务器上配置cas 服务的访问域名。
c serverName 参数,cas client 会用来生成service 参数,并且cas 服务器在认证通过、ticket 验证通过后,会redirect 到web 应用,redirect 的url 就是service 参数的值。serverName 参数可以是IP ,也可以是域名,只要保证浏览器能访问到即可。
4.添加jdbc认证:
我们需要在D:\apache-tomcat-7.0.54\webapps\cas\WEB-INF\lib中加入c3p0-0.9.1.2.jar包、mysql-connector-java-5.1.21.jar包和cas-server-support-jdbc-4.0.0.jar包。
首先,打开D:\apache-tomcat-7.0.54\webapps\cas\WEB-INF\deployerConfigContext.xml,
注释掉默认的用户验证,添加JDBC认证,代码如下:
<!--<bean id="primaryAuthenticationHandler"
class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
<property name="users">
<map>
<entry key="casuser" value="zzx"/>
</map>
</property>
</bean> -->
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="com.mysql.jdbc.Driver"p:jdbcUrl="jdbc:mysql://localhost:3306/glsx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"
p:user="root"
p:password="root" />
<!-- 密码加密方式-->
<bean id="passwordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
c:encodingAlgorithm="SHA1"
p:characterEncoding="UTF-8" />
<bean id="dbAuthHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="dataSource"
p:sql="select password from glsx.t_user_info where lower(username)=lower(?)" />
<!-- p:passwordEncoder-ref="passwordEncoder" --><!-- 暂时不使用密码加密 -->
再修改D:\apache-tomcat-7.0.54\webapps\cas\WEB-INF\deployerConfigContext.xml中authentication manager的配置:
<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager">
<constructor-arg>
<map>
<entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
<!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" /> -->
<entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/>
</map>
</constructor-arg>
<property name="authenticationPolicy">
<bean class="org.jasig.cas.authentication.AnyAuthenticationPolicy" />
</property>
</bean>
5.cas用户信息接口配置:
deployerConfigContext.xml文件,同时配置 attributeRepository 如下:
a.
<bean class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao" id="attributeRepository">
<constructor-arg index="0" ref="casDataSource"/>
<constructor-arg index="1" value="select * from t_user_info where {0}"/>
<property name="queryAttributeMapping">
<map>
<entry key="username" value="username"/> // 这里的key需写username,value对应数据库用户名字段
</map>
</property>
<property name="resultAttributeMapping">
<map>
<entry key="id" value="id"/>
<entry key="mobile" value="mobile"/>
<entry key="email" value="email"/>
</map>
</property>
</bean>
(按照上述配置后,万里长征就差最后一步了)修改 WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp
在server验证成功后,这个页面负责生成与客户端交互的xml信息,在默认的casServiceValidationSuccess.jsp中,只包括用户名,并不提供其他的属性信息,因此需要对页面进行扩展,如下,红色为新添加部分
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
<cas:authenticationSuccess>
<cas:user>${fn:escapeXml(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.id)}</cas:user>
<c:if test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes) > 0}">
<cas:attributes>
<c:forEach var="attr" items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}">
<cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>
</c:forEach>
</cas:attributes>
</c:if>
<c:if test="${not empty pgtIou}">
<cas:proxyGrantingTicket>${pgtIou}</cas:proxyGrantingTicket>
</c:if>
<c:if test="${fn:length(assertion.chainedAuthentications) > 1}">
<cas:proxies>
<c:forEach var="proxy" items="${assertion.chainedAuthentications}" varStatus="loopStatus" begin="0" end="${fn:length(assertion.chainedAuthentications)-2}" step="1">
<cas:proxy>${fn:escapeXml(proxy.principal.id)}</cas:proxy>
</c:forEach>
</cas:proxies>
</c:if>
</cas:authenticationSuccess>
</cas:serviceResponse>
通过完成上面四个步骤的配置后,server端的工作就完成了,那么如何在客户端获取这些信息呢?下面进行说明:
----------------------------------------------------------------------------------------------------------------------------------------
客户端获取用户信息
----------------------------------------------------------------------------------------------------------------------------------------
java客户端获取用户信息:
AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
Map attributes = principal.getAttributes();
String email=attributes .get("email");

- 大小: 7.3 KB

- 大小: 8.4 KB
分享到:
相关推荐
总结,CAS(Central Authentication Service)是一种基于 Web 的单点登录(Single Sign-On, SSO)框架,用于统一管理多个应用系统的用户认证。在上述环境中,我们搭建了一个 CAS 服务器,配置了支持 HTTPS 的 Tomcat...
单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统上登录后,无需再次输入...通过理解和实践CAS Server的配置以及客户端的集成,开发者可以有效地在自己的应用环境中实现单点登录功能。
本课程主要通过CAS来实现SSO,本教程会从最基本的基础知识讲起,由浅入深再到实战,完成多应用的单点登录功能。 本课程内容如下: 1、 什么是SSO和CAS 2、 CAS Server服务端和客户端的搭建和配置 3、 单点登录和单...
总结起来,这个"单点登录cas服务器demo及springboot客户端demo"项目提供了一个实践单点登录概念的实例,涵盖了CAS服务器的搭建、Spring Boot应用的CAS客户端集成,以及Shiro或Pac4j的使用。对于想要学习和理解SSO...
总结来说,"单点登录CAS相关资料"包含了实现SSO的关键组件:CAS服务器的可部署版本(cas.war)、针对个性化需求的自定义登录页面以及运行CAS所需的一系列库文件。通过理解和运用这些资源,开发者可以搭建并配置自己...
### 单点登录CAS安装配置详解 #### 一、单点登录CAS简介 单点登录(CAS, Central Authentication Service)是一种分布式网站系统用户认证解决方案,最初由麻省理工学院开发,现由耶鲁大学维护。CAS允许用户在一个...
总的来说,CAS单点登录实例的搭建涉及多个步骤,从下载和配置必要的jar包,到修改配置文件,再到整合客户端应用,每一个环节都需要对CAS协议和SSO原理有深入理解。同时,安全性和用户体验也是实施过程中不可忽视的...
4. 退出逻辑:实现单点登出功能,当用户在一个应用中注销时,客户端会通知其他应用同步注销状态。 在源码中,开发者可以深入理解CAS SSO的工作流程,包括: - 如何配置CAS服务器,设置认证源和策略。 - 客户端如何...
CAS实现单点登录(sso)搭建流程
该文档以CAS为列,详细讲述了sso登录原理及环境搭建过程,结合项目中的运用,对照文档,可以很清晰的搭建SSO单点登录环境
CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(Single Sign-On,SSO)框架,由耶鲁大学开发并维护。SSO允许用户通过一次登录验证就能访问多个应用系统,无需在每个系统之间单独进行...
而CAS(Central Authentication Service)是一个开源的单点登录协议,它允许用户通过一个中央认证服务来访问多个应用,无需重复登录。 在实现Spring Security与CAS的集成过程中,主要涉及以下几个关键知识点: 1. ...
SSO的效果在于,当用户访问其他已信任的服务时,CAS Server可以通过TGC直接验证用户身份,无需再次登录。如果TGC已失效,用户则需重新进行认证。 在实际配置中,例如使用Tomcat 5.5,需要为服务器创建证书库文件,...
#### 三、搭建CAS单点登录环境 本节将详细介绍如何配置一个基本的CAS单点登录环境,包括服务器端数字证书的生成与配置,以及Tomcat服务器的安全设置。 ##### 1. 配置服务器端的数字证书 在CAS环境中,数字证书...
CAS(Central Authentication Service)单点登录(Single Sign-On,简称SSO)是一种网络认证协议,旨在简化用户在多个应用系统间的登录流程。当用户通过CAS认证后,可以在无需再次输入凭证的情况下访问已接入CAS的...
使用CAS实现SSO搭建指南;从头开始,最后结合eclipse实现,并介绍如何做出自己想要的程序。
在IT行业中,单点登录(Single Sign-On, SSO)是一种常见的身份验证机制,它允许用户在一个系统上登录后,无需再次认证即可访问其他多个相互信任的系统。本项目是关于如何将CAS(Central Authentication Service)与...
CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。本压缩包提供了CAS服务端自定义认证的实现,以及CAS客户端的配置...
总之,CAS 4.0的单点登录服务器配置成功后,可以极大地提升用户体验,简化身份验证流程,并为权限控制提供了强大的基础。通过不断的测试和优化,你可以确保这个系统在实际环境中稳定可靠地运行。