CAS3.5.2单点登录详解
服务端cas:从网上下载cas:/在cas下:在cas-client下:解压cas-server-3.5.2-release.zip\cas-server-3.5.2\module\cas-server-webapp-3.5.2.war部署到tomcat上,设置F:\apache-tomcat-6.0.30\webapps\cas\WEB-INF\cas-servlet.xml(大家取实际情况的路径) <bean id="logoutController" class="org.jasig.cas.web.LogoutController"p:followServiceRedirects="${cas.logout.followServiceRedirects:true}"/> 默认为false,这个设置是为了让登出(logout)以后进入到指定页面.设置deployerConfigContext.xml配置数据源和加密:<beanid="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <propertyname="driverClassName"><value>oracle.jdbc.driver.OracleDriver</value></property> <propertyname="url"><value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value></property><property name="username"><value>require</value></property><property name="password"><value>require</value></property></bean><!-- <beanid="MD5PasswordEncoder"class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"><constructor-arg index="0"><value>MD5</value></constructor-arg></bean> -->然后注释掉下面这行,这行是为了测试使用,只要账号密码相同就可以通过验证<beanclass="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthentication Handler" />这里看sql语句就知道是连数据库验证账号密码了<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> <property name="dataSource" ref="dataSource"></property> <property name="sql"value="select userpassword from user_ where useraccount=?"></property><!--<property name="passwordEncoder" ref="MD5PasswordEncoder"></property>--> </bean>CAS服务器端的修改:修改spring-configuration/ticketGrantingTicketCookieGenerator.xml<="" span="">p:cookieSecure="true"p:cookieMaxAge="-1"p:cookieName="CASTGC"p:cookiePath="/cas" />将p:cookieSecure="true" 改为 false false才能避免取消ssl后重复登录这个设置完大家就不要用https了直接使用http:xxx还有一个地方要特别说明:有一个地方设置系统数量的:在spring-configuration/ticketExpirationPolicies.xml设置c:numberOfUses="2";你要加多少个系统就写多少数字。
服务端配置完成了。
客户端:在项目中导入cas-client.jar设置filter编辑web.xml,然后粘贴下面的代码:<!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置--><LISTENER><LISTENER-CLASS>org.jasig.cas.client.session.SingleSignOutHttpSession Listener</LISTENER-CLASS></LISTENER><!-- 该过滤器用于实现单点登出功能,可选配置。
--><FILTER><FILTER-NAME>CAS Single Sign Out Filter</FILTER-NAME><FILTER-CLASS>org.jasig.cas.client.session.SingleSignOutFilter</FILTE R-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.AuthenticationFilte r</FILTER-CLASS><INIT-PARAM><PARAM-NAME>casServerLoginUrl</PARAM-NAME><PARAM-VALUE>https://:8443/cas/login</PARAM-VALUE><!--这里的server是服务端的IP--></INIT-PARAM><INIT-PARAM><PARAM-NAME>serverName</PARAM-NAME><PARAM-VALUE>http://localhost:10000</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.Cas20ProxyReceivingTicketValidationFi lter</FILTER-CLASS><INIT-PARAM><PARAM-NAME>casServerUrlPrefix</PARAM-NAME><PARAM-VALUE>https://:8443/cas</PARAM-VALUE></INIT-PARAM><INIT-PARAM><PARAM-NAME>serverName</PARAM-NAME><PARAM-VALUE>http://localhost:10000</PARAM-VALUE></INIT-PARAM></FILTER><FILTER-MAPPING><FILTER-NAME>CAS Validation Filter</FILTER-NAME><URL-PATTERN>/*</URL-PATTERN></FILTER-MAPPING><!--该过滤器负责实现HttpServletRequest请求的包裹,比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。
AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();String username = principal.getName();--><FILTER><FILTER-NAME>CAS HttpServletRequest Wrapper Filter</FILTER-NAME><FILTER-CLASS>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</FILTER-CLA SS></FILTER><FILTER-MAPPING><FILTER-NAME>CAS HttpServletRequest Wrapper Filter</FILTER-NAME><URL-PATTERN>/*</URL-PATTERN></FILTER-MAPPING><!--该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder 来获取用户的登录名。
CAS_SSO单点登录实例详细步骤
CAS SSO单点登录实例详细步骤原创作者:孙俊财第一步1、用keytool生成证书:命令:keytool -genkey -alias sjc -keyalg RSA -keysto re c:/store/mykey说明:这里-alias sjc 是表示生成的这个证书的别名叫sjc,-keyalg RSA 指的是采用的RSA算法,-keystore c:/store/mykey是指生成的证书存储的位置。
回车后会提示你输入keystore password,这可以自己定(这里输入sunjuncai,下面配tomcat时要用的),然后是一些个人信息及组织信息,可以轻松搞定。
注意:密码输入后,会让你输入其他信息,记得这里第一个姓名必须是服务器的域名这里我输入的是完整计算机名称:gaofeng.nmc.hamcc这里要注意如果不这样写就会报如下异常:java.io.IOException: HTTPS hostname wrong: should be <localhost>实战:C:\Documents and Settings\wangyoushi8>keytool -genkey -alias sjc -keyalg RSA -keystorec:/store/mykey输入keystore密码:sunjuncai您的名字与姓氏是什么?[Unknown]:gaofeng.nmc.hamcc您的组织单位名称是什么?[Unknown]:上海神洲数港您的组织名称是什么?[Unknown]:网络优化您所在的城市或区域名称是什么?[Unknown]:郑州您所在的州或省份名称是什么?[Unknown]:河南该单位的两字母国家代码是什么[Unknown]:ZHCN= gaofeng.nmc.hamcc, OU=上海神洲数港, O=网络优化, L=郑州, ST=河南, C=ZH 正确吗?[否]:y输入<sjc>的主密码(如果和keystore 密码相同,按回车):2、创建证书后,就导出证书:命令:keytool -export -file c:/store/server.crt -alias sjc -keystore c:/store/mykey说明:从c:/store/mykey里取出证书入到c:/store/下,如果没有指定,就是存放在目录下C:\Documents and Settings\用户目录名\实战:C:\Documents and Settings\wangyoushi8>keytool -export -file c:/store/server.crt -alias sjc-keystore C:/store/mykey输入keystore密码:sunjuncai保存在文件中的认证<c:/store/server.crt>3、为客户端的JVM导入密钥:命令:keytool -import -keystore D:/jdk1.5.0_12/jre/lib/security/cacerts -file c:/store/server.crt -alias sjc说明:注意:输入密码时密码为"changeit",这是默认密码.特别说明:这个D:/jdk1.5.0_12/jre/lib/security/cacerts是指JDK的JRE路径下的lib目录.至此,第一步完成。
CAS单点登录配置全过程
CAS配置全过程软件工具:1.cas-server-3.3.5-release.zip(CAS服务端)2.cas-client-3.1.10-release.zip(CAS客户端)3.apache-tomcat-7.0.40mons-dbcp-all-1.3-r699049.jar5.mysql-connector-java-5.1.18-bin.jar6.cas-server-jdbc-3.0.5-rc2.jar写在前面的话此配置是根据当前系统,当前的版本,仅供参考,如果有什么其他的问题可以一起研究。
第一节:先走通技术障碍第一步:环境部署1.在Tomcat 根目录下创建一个cas目录。
2.下载CAS服务器并解压,打开cas-server-3.3.5\modules,将cas-server-webapp-3.3.5.war复制到刚刚在Tomcat创建的cas目录下,并重命名为ROOT.war3.修改host文件(C:\Windows\System32\drivers\etc)添加127.0.0.1 注意:如果想在一台PC机上模拟这个单点登录,就必须域名重定向,如果是多台PC机,可以不配置此项,下文有用到,可以用相应PC机的IP代替4.修改Tomcat文件下的server.xml(apache-tomcat-7.0.40\conf\server.xml)添加内容:<Host name="" appBase="cas"unpackWARs="true" autoDeploy="true"></Host>5.启动Tomcat服务,查看信息,(如果有报错,可以根据信息查找错误),打开浏览器,输入:8080如果出现以下界面,则CAS服务端配置成功。
注:这个是最简单的CAS服务,只要输入的用户名跟密码一样,就可以正常登陆,在我们实际开发中,这个验证因为跟数据库作比较,接下来,我们就配置数据库校验。
CAS-单点登录操作文档
CAS-单点登录操作文档这人CAS 在 Tomcat 中实现单点登录1证书生成及导入1.1Server端证书配置1.2JAVA信任证书库D:\Program Files\Java\jdk1.5.0\jre\lib\security\cacertscacerts证书库默认密码-storepass changeit查看证书1.1.1.2 keytool -list -keystore cacerts -storepass changeit如果存在则删除1.1.1.1 keytool -delete -alias tomcatsso -keystore cacerts -storepasschangeit创建证书库1.1.1.3 keytool -genkey -keyalg RSA -alias tomcatsso -dname "cn="-keystore server.keystore -storepass 12345678导出证书1.1.1.4 keytool -export -alias tomcatsso -file tomcatsso.crt -keystoreserver.keystore -storepass 12345678加入JAVA信任证书库1.1.1.5 keytool -import -alias tomcatsso -file tomcatsso.crt-keystore ../jre/lib/security/cacerts -storepass changeit说明:在生成key的过程,"cn=" 中的为Server端的域名(必填)。
1.2.1TOMCAT 配置SSL支持<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"minSpareThreads="5" maxSpareThreads="75"enableLookups="true" disableUploadTimeout="true"acceptCount="100" maxThreads="200"scheme="https" secure="true"clientAuth="false" sslProtocol="TLS"keystoreFile="D:/javatools/Tomcat 6.0/conf/server.keystore"keystorePass="12345678"truststoreFile="D:/ProgramFiles/Java/jdk1.5.0/jre/lib/security/cacerts"truststorePass="changeit"/>常用的配置属性:clientAuth如果想要Tomcat为了使用这个socket而要求所有SSL客户出示一个客户证书,置该值为true。
CAS实现单点登录详解
CAS实现单点登录详解
单点登录(Single Sign-On,简称SSO)是一种身份验证方式,允许
用户在多个应用系统中使用一组凭证(如用户名和密码)进行认证,并在
通过认证后在这些应用系统中自动登录,而无需再次输入凭证。
SSO技术
的应用可以大大提高用户体验,简化用户的登录流程,提高系统的安全性。
CAS(Central Authentication Service)是一种用于实现单点登录
的开放源代码的身份验证协议。
它包含一个认证服务器和多个客户端应用
系统。
认证服务器负责身份验证并颁发凭证,而客户端应用系统通过与认
证服务器进行通信来验证用户的凭证。
下面详细介绍CAS实现单点登录的过程:
1. 用户请求访问一个需要身份验证的应用系统,如Web应用。
cas单点登录认证原理
cas单点登录认证原理1、背景介绍单点登录:Single Sign On,简称SSO,SSO使得在多个应⽤系统中,⽤户只需要登录⼀次就可以访问所有相互信任的应⽤系统。
CAS框架:CAS(Central Authentication Service)是实现SSO单点登录的框架。
2、盗⼀张学习CAS绝⼤多都看过的图以及执⾏部分分析注:已分不清原创,此处就不给出地址了。
从结构上看,CAS包含两个部分:CAS Server 和CAS Client需要独⽴部署,主要负责对⽤户的认证⼯作;CASClient负责处理对客户端受保护资源的访问请求,需要登录时,重定向到CAS Server.图1是CAS最基本的协议过程:CAS Client 与受保护的客户端应⽤部署在⼀起,以Filter⽅式保护 Web 应⽤的受保护资源,过滤从客户端过来的每⼀个 Web 请求,同时, CAS Client会分析HTTP 请求中是否包请求 Service Ticket( 上图中的 Ticket),如果没有,则说明该⽤户是没有经过认证的,于是,CAS Client会重定向⽤户请求到CAS Server( Step 2 )。
Step3是⽤户认证过程,如果⽤户提供了正确的Credentials, CAS Server 会产⽣⼀个随机的 Service Ticket,然后,缓存该 Ticket ,并且重定向⽤户到CAS Client(附带刚才产⽣的Service Ticket), ServiceTicket 是不可以伪造的,最后, Step 5 和 Step6是 CAS Client 和 CASServer之间完成了⼀个对⽤户的⾝份核实,⽤Ticket查到 Username ,因为 Ticket是 CAS Server产⽣的,因此,所以 CAS Server 的判断是⽏庸置疑的。
该协议完成了⼀个很简单的任务,所有与CAS的交互均采⽤SSL协议,确保ST和TGC的安全性。
单点登录原理及CAS实现【面试+工作】
单点登录原理及CAS实现【面试+工作】单点登录原理及实现sso【面试+工作】WEB的登录那些事说道账户登录和注册,其实我们每天都在亲身感受着,像微博、知乎还有简书等等。
我们总是需要定期的去重新登录一下,对于这种认证机制,我们都能说出来两个名词,Cookie、Session。
的确没错,Cookie和Session是实现这一切的核心。
为什么会有Cookie和Session?区别是什么?引入这两个概念的根本原因是因为Http协议是无状态的,也就是说它不能建立起多次请求之间的关系。
所以需要引入一个能有浏览器或服务器保存的一个上下文状态,也就是Cookie和Session。
说到底Session的实现是依赖于Cookie的,因为Cookie是真正的由浏览器保存的状态,Session是利用了JSessionID。
在我看来其实两者有差异,但是根本的依赖是一样的。
Cookie也是有生命周期的,像Session级别或者有一定“寿命”的Cookie。
一切是由浏览器去维护的。
常见的跨域登录问题之前楼主主要是做账户和Passport这方面的工作,其实在跨域这也是碰见了一些问题。
对于同一个根域下的登录问题如果我们的站点有不止一个业务,那么他们可能部署在不同的机器上,也往往需要不同的域名进行区分。
但是所有的业务又都是依赖于一套账户体系,那么我们这时候需要通过一次登录解决所有站点的登录问题,那么我们这个时候可以使用一个最笨的方法:那就是一次登录成功,将Cookie写到根域下,那么这样所有的站点就能实现,同一个根域下的Cookie共享,自然实现了”单点登录“。
对于多个根域下的登录问题如果是多个根域名,那么这种情况下上面的机制就不能实现“单点登录”了。
因为之所以上面可以实现“单点登录”的效果。
是因为浏览器和Http协议的支持。
但是对于跨根域的站点之间进行Cookie 的共享是比较复杂的。
方法1:登录成功之后将Cookie回写到多个域名下。
SSO之CAS单点登录详细搭建
SSO之CAS单点登录详细搭建:环境说明:同一个机器上环境如下:操作系统:windows7 64位JDK版本:1.7.0_80web容器版本:apache-tomcat-7.0.70 64位服务端:cas-3.5.2.1.zip服务端现在地址:https:///apereo/cas/archive/v4.2.3.zip客户端:cas-client-3.3.3-release.zip客户端下载地址:/cas-clients/eclipse版本:eclipse-jee-luna-SR2-win32-x86_64.zip1、将cas-3.5.2.1 cas-client-3.3.3 标准maven工程导入eclipse 打包编译;2、修改本机C:\Windows\System32\drivers\etc\hosts (CAS单点登录系统是基于JAVA安全证书的https 访问,要使用CAS单点登录必须要配置域名, cas是不能通过ip访问的.)附件-->记事本管理员权限编辑hosts文件,加入如下三行代码后保存。
127.0.0.1 127.0.0.1 127.0.0.1 解释: =>> 对应部署cas server的tomcat,这个虚拟域名还用于服务端证书生成 =>> 对应部署client1客户端应用的tomcat =>> 对应部署client2客户端应用的tomcat3、安全证书配置3.1、管理员模式打开cmd命令窗口,生成证书,在cmd窗口输入以下命令:C:\Users\Administrator>keytool -genkey -alias ssoflyer -keyalg RSA -keysize 1024 -keypass flyer2016 -validity 365 -keystore D:\app\flyer.keystore -storepass flyer2016说明:-alias自定义的别名;-keypass指定证书密钥库的密码;-storepass和前面keypass密码相同,否则下面tomcat配置https会访问失败;-keystore指定证书的位置,例如:D:\app\目录,密钥库名称可以自定义,例如:flyer.keystore特别注意:您的名字与姓氏是什么?该项一定要使用网站的域名,例如: ,Cas Client使用httpclient访问cas server的时候,会严格的检查证书。
CAS单点登录系列
小蚂蚁-CAS单点登录系列(1)-基础知识1.单点登录1.1.概述单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。
SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
1.2.技术实现机制当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候,就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行效验,检查ticket的合法性。
如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。
1.3.要实现SSO需要以下主要的功能所有应用系统共享一个身份认证系统;所有应用系统能够识别和提取ticket信息;应用系统能够识别已经登录过的用户,能自动判断当前用户是否登录过,从而完成单点登录的功能。
其中,统一的身份认证系统最重要,认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。
另外,认证系统还应该对ticket进行效验,判断其有效性。
整个系统可以存在两个以上的认证服务器,这些服务器甚至可以是不同的产品。
认证服务器之间要通过标准的通讯协议,互相交换认证信息,就能完成更高级别的单点登录。
2.数字签名2.1.概念数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。
一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。
2.2.主要功能保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。
数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。
cas单点登录自定义servicevalidate方法 -回复
cas单点登录自定义servicevalidate方法-回复CAS(Central Authentication Service)是一种常见的单点登录(Single Sign-On)解决方案,它通过集中验证用户身份,实现在不同的服务之间无需重复登录的便利。
虽然CAS已经提供了一套完善的验证流程,但有时我们可能需要根据特定的需求自定义`serviceValidate`方法。
本文将逐步介绍如何实现CAS单点登录自定义`serviceValidate`方法,并解释其作用,以及如何应用于实际项目中。
第一步:了解CAS验证流程在开始自定义`serviceValidate`方法之前,我们首先需要了解CAS的验证流程。
以下是一般情况下CAS的验证流程:1. 用户打开客户端应用程序,并尝试访问需要登录的资源。
2. 客户端应用程序将用户重定向到CAS服务器。
3. CAS服务器显示登录页面,用户在该页面输入用户名和密码。
4. CAS服务器验证凭证的正确性,并生成一个票据(ticket)。
5. CAS服务器将用户重定向回客户端应用程序,并将票据附加在URL中。
6. 客户端应用程序接收到票据后,将其发送给CAS服务器进行验证。
7. CAS服务器对票据进行验证,验证通过后返回用户信息给客户端应用程序。
8. 客户端应用程序使用返回的用户信息进行授权操作,允许用户访问资源。
在这个流程中,`serviceValidate`方法负责对票据进行验证,并返回用户信息。
第二步:CAS服务端配置要自定义`serviceValidate`方法,我们首先需要对CAS服务端进行配置。
假设我们已经搭建好了CAS服务端,并且熟悉CAS的基本配置。
首先,我们需要编辑`cas.properties`文件,该文件包含了CAS服务端的配置信息。
在该文件中,找到以下配置项:cas.service.ticket.registry.core.ticketCatalog=org.apereo.cas.ticket. DefaultTicketCatalog将上述配置项替换为:cas.service.ticket.registry.core.ticketCatalog=org.apereo.cas.ticket.r egistry.DefaultTicketRegistry这将启用默认的票据注册,以便我们在自定义`serviceValidate`方法中使用。
cas单点登录系统:客户端(client)详细配置
cas单点登录系统:客户端(client)详细配置最近⼀直在研究cas登录中⼼这⼀块的应⽤,分享⼀下记录的⼀些笔记和⼼得。
后⾯会把cas-server端的配置和重构,另外还有这⼏天再搞nginx+cas的https反向代理配置,以及cas的证书相关的知识分享出来。
Cas由两部分组成,Cas Server和Cas Client。
Cas Server是Cas⾃⼰的服务端,⽽Cas Client是Cas客户端,往往客户端需要和我们具体的业务系统进⾏集成,这⾥我们主要详述cas 客户端的配置以及实例第⼀步:我们得有⼀个现成的web项⽬,然后我们要加⼊cas-client-core-xxx.jar到classpath;maven项⽬⽤这个:<dependency><groupId>org.jasig.cas.client</groupId><artifactId>cas-client-core</artifactId><version>3.3.3</version></dependency>第⼆步:配置Filter我们需要在应⽤的web.xml⽂件中配置四个Filter,这四个Filter必须按照固定的顺序来进⾏配置,⽽且它们必须配置在应⽤的其它Filter之前。
它们的先后顺序要求如下:1、AuthenticationFilter2、TicketValidationFilter3、HttpServletRequestWrapperFilter4、AssertionThreadLocalFilter1.1、 配置AuthenticationFilter1.1.1、AuthenticationFilter有两个必须指定的参数:casServerLoginUrl⽤来指定Cas Server登录地址,serverName或service⽤来指定认证成功后需要跳转地址。
