CAS实现单点登录(SSO)经典完整教程
一、简介1、cas是有耶鲁大学研发的单点登录服务器2、本教材所用环境∙Tomcat7.2∙JDK6∙CAS Service 版本 cas-server-3.4.8-release∙CAS Client版本 cas-client-3.2.1-release二、生成证书证书对于实现此单点登录非常之重要,证书是服务器端和客户端安全通信的凭证,本教程只是演示,所有用了 JDK自带的证书生成工具keytool。
当然在实际项目中你可以到专门的证书认证中心购买证书。
中文官方网站:/cn/1、用JDK自带的keytool生成证书view plain1.命令:keytool -genkey -alias smalllove -keyalg RSA -keystore D:/keys/smallkey此命令是生成一个证书,其中smalllove 是证书别名此命令的执行如图所示:其中名字与姓氏这一最好写你的域名,如果在单击测试你可以在C:\Windows\System32\drivers\etc\hosts文件中映射一个虚拟域名,注意不要写IP。
2、导出证书view plain1.命令:C:\>keytool -export -file d:/keys/small.crt -alias smalllove -keystore d:/keys/smallkey如图:密码为上步设置的密码。
3、把证书导入到客户端JDK中。
view plain1.命令:keytool -import -keystore C:\Java\jdk1.6.0_21\lib\security\cacerts -file D:/keys/small.crt -alias smalllove此命令是把证书导入到JDK中。
如图:到此证书导入成功。
注意:在此步有可能出现如下错误view plain1.C:\>keytool -import -keystore C:\Java\jdk1.6.0_21\lib\security\cacerts -file D:/keys/small.crt -alias smalllove2.输入keystore密码:3. keytool错误: java.io.IOException: Keystore was tampered with, or password was incorrect次错误的解决方法是,把%JAVA_HOME%\lib\security下的cacerts文件删除掉,在执行。
三、配置服务端1、下载CAS的服务端,解压,把解压后的文件中modules文件夹中的cas-server-webapp-3.4.8.war文件拷贝的%TOMCAT_HOME%\webapps下,并修改文件名为:cas.war。
2、修改%TOMCAT_HOME%\conf\server.xml文件去掉此文件83到93行之间的注释,修改为:view plain1.<Connector port="8443"protocol="HTTP/1.1"SSLEnabled="true"2.maxThreads="150"scheme="https"secure="true"3.clientAuth="false"sslProtocol="TLS"4.keystoreFile="D:/keys/smallkey"<!--在2.1中生成的证书的位置-->5.keystorePass="smalllove"/><!--在2.1中设置的密码-->3、以上配置完成访问http://yourhost:8443/cas出现一下页面点击继续浏览会出现输入用户名admin和密码admin登录则会出现登录成功。
至此,说明服务端配置成功。
四、配置客户端1、添加客户端到你的项目中·手动下载下载cas-client,地址:/downloads/cas-clients/,然后解压cas-client-3.1.12.zip,在modules文件夹中有需要的jar包,请根据自己的项目情况选择使用,把相应的jar包放到你项目WEB-INF/lib下。
·使用mavenview plain1.<!-- cas -->2.<dependency>3.<groupId>org.jasig.cas.client</groupId>4.<artifactId>cas-client-core</artifactId>5.<version>3.1.12</version>6.</dependency>2、在客户端项目的web.xml配置过滤器view plain1.<!-- ======================== 单点登录开始 ======================== -->2.<!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->3.<listener>4.<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>5.</listener>6.7.<!-- 该过滤器用于实现单点登出功能,可选配置。
-->8.<filter>9.<filter-name>CAS Single Sign Out Filter</filter-name>10.<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>11.</filter>12.<filter-mapping>13.<filter-name>CAS Single Sign Out Filter</filter-name>14.<url-pattern>/*</url-pattern>15.</filter-mapping>16.17.<!-- 该过滤器负责用户的认证工作,必须启用它 -->18.<filter>19.<filter-name>CASFilter</filter-name>20.<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>21.<init-param>22.<param-name>casServerLoginUrl</param-name>23.<param-value>https://:8443/cas/login</param-value>24.<!--这里的server是服务端的IP -->25.</init-param>26.<init-param>27.<param-name>serverName</param-name>28.<param-value>:8080</param-value><span style="color:#FF0000;">①</span>29.</init-param>30.</filter>31.<filter-mapping>32.<filter-name>CASFilter</filter-name>33.<url-pattern>/*</url-pattern>34.</filter-mapping>35.36.<!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->37.<filter>38.<filter-name>CAS Validation Filter</filter-name>39.<filter-class>40. org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>41.<init-param>42.<param-name>casServerUrlPrefix</param-name>43.<param-value>https://:8443/cas</param-value>44.</init-param>45.<init-param>46.<param-name>serverName</param-name>47.<param-value>:8080</param-value><span style="color:#FF0000;">②</span>48.</init-param>49.</filter>50.<filter-mapping>51.<filter-name>CAS Validation Filter</filter-name>52.<url-pattern>/*</url-pattern>53.</filter-mapping>54.55.<!-- 该过滤器负责实现HttpServletRequest请求的包裹,比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。
springboot集成cas5.3实现sso单点登录详细流程
springboot集成cas5.3实现sso单点登录详细流程什么是单点登录?单点登录(Single Sign On),简称为 SSO,是⽬前⽐较流⾏的企业业务整合的解决⽅案之⼀。
SSO的定义是在多个应⽤系统中,⽤户只需要登录⼀次就可以访问所有相互信任的应⽤系统。
我们⽬前的系统存在诸多⼦系统,⽽这些⼦系统是分别部署在不同的服务器中,那么使⽤传统⽅式的session是⽆法解决的,我们需要使⽤相关的单点登录技术来解决。
SSO单点登录访问流程主要有以下步骤:访问服务:SSO客户端发送请求访问应⽤系统提供的服务资源。
定向认证:SSO客户端会重定向⽤户请求到SSO服务器。
⽤户认证:⽤户⾝份认证。
发放票据:SSO服务器会产⽣⼀个随机的Service Ticket。
验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。
传输⽤户信息:SSO服务器验证票据通过后,传输⽤户认证结果信息给客户端。
(作者补充:其实简单来说,cas就是中央认证服务,就是单点登录,单点登录简称为sso!)cas服务端部署mvn package3、把target下⽣成的war包重命名为cas.war放到tomcat下4、启动tomcat5、找到解压的⽂件由于cas默认使⽤的是基于https协议,需要改为兼容使⽤http协议,打开对应你的⽬录⽂件:D:\tomcat8\webapps\cas\WEB-INF\classes\application.properties修改application.properties⽂件,添加下⾯配置,使⽤http#使⽤http协议cas.tgc.secure=falsecas.serviceRegistry.initFromJson=true#由于https协议默认使⽤的端⼝为8443,还需我们修改为tomcat的8080端⼝server.port=8080修改HTTPSandIMAPS-10000001.json⽂件D:\tomcat8\webapps\cas\WEB-INF\classes\services⽬录下的HTTPSandIMAPS-10000001.json把原来的serviceId内容改成如下"serviceId" : "^(https|http|imaps)://.*",兼容http修改完毕。
SSO单点登录—CAS统一身份认证
SSO单点登录—CAS统⼀⾝份认证单点登录SSO(Single Sign ON)如:在学校登录了OA系统,再打开考试系统、教务系统,都会实现⾃动登录。
统⼀⾝份认证CAS(Central Authentication Service)CAS 是由耶鲁⼤学发起的企业级开源项⽬,历经20多年的完善,具有较⾼的稳定性、安全性。
国内多数⾼校的SSO都基于CAS。
// 3.1如果有票据,则进⾏验证CasVO casVO = checkTicket(request);if (casVO.isLogin() && clientSystem.doLogin(casVO)){// 3.2给session中写⼊登录标识(⽤于checkLogin)session.setAttribute(CasConfig.LOGIN_KEY, true);// 3.3登录成功跳转⾄业务系统urlresponse.sendRedirect(targetUrl);} else {// cas账户信息异常,跳转配置的错误页⾯String errorUrl = getErrorUrl(request);response.sendRedirect(errorUrl);}} else {// 3.2如果ticket不存在String loginUrl = getLoginUrl(request);System.err.println("loginUrl:"+loginUrl);response.sendRedirect(loginUrl);}}}private CasVO checkTicket(HttpServletRequest request) throws IOException {// 1.获取票据验证的urlString serviceValidateUrl = getServiceValidateUrl(request);System.out.println("验证票据的地址:" + serviceValidateUrl);// 2.get请求获取CAS服务器的登录信息String casUserInfoXml = doGet(serviceValidateUrl);casUserInfoXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + casUserInfoXml;// 3.解析返回的xml结果System.out.println(casUserInfoXml);CasVO casVO = resolveCasXml(casUserInfoXml);return casVO;}/*** 业务系统的登录接⼝*/interface ClientSystem {boolean doLogin(CasVO casVO);}/*** 解析CAS账户信息* @param casUserInfoXml* @return*/private CasVO resolveCasXml(String casUserInfoXml) {final String CAS_PREFIX = "cas:";final String LOGIN_SUCCESS_KEY = CAS_PREFIX + "authenticationSuccess";final String ACCOUNT_KEY = CAS_PREFIX + "user";final String ATTRIBUTES_KEY = CAS_PREFIX + "attributes";CasVO casVO = new CasVO();if (casUserInfoXml == null || "".equals(casUserInfoXml)) {return casVO;}DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();InputStream in = null;try {DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();in = IOUtils.toInputStream(casUserInfoXml, Charset.forName(CasConfig.UTF_8));Document rootDoc = docBuilder.parse(in);NodeList successNodeList = rootDoc.getElementsByTagName(LOGIN_SUCCESS_KEY);if (successNodeList.getLength() > 0) {Node successNode = successNodeList.item(0);Document successDocument = successNode.getOwnerDocument();NodeList accountNodeList = successDocument.getElementsByTagName(ACCOUNT_KEY);if (accountNodeList != null&& accountNodeList.getLength() > 0) {Node accountNode = accountNodeList.item(0);Node accountText = accountNode.getFirstChild();String nodeValue = accountText.getNodeValue();casVO.setAccount(nodeValue);}NodeList attrsNodeList = successDocument.getElementsByTagName(ATTRIBUTES_KEY);if (attrsNodeList.getLength() > 0) {Node attrsNode = attrsNodeList.item(0);if (attrsNode.hasChildNodes()) {Document attrsDoc = attrsNode.getOwnerDocument();Field[] fields = casVO.getClass().getDeclaredFields();for (Field field : fields) {String fieldName = field.getName();String attrTagName = CAS_PREFIX + fieldName;NodeList attrNodeList = attrsDoc.getElementsByTagName(attrTagName);if (attrNodeList.getLength() > 0) {Node attrNode = attrNodeList.item(0);Node attrText = attrNode.getFirstChild();if (attrText != null) {field.set(casVO, attrText.getNodeValue().trim());}}}}}}} catch (Exception e) {// 解析⽤户信息失败!e.printStackTrace();} finally {IOUtils.closeQuietly(in);}return casVO;}/*** 获取验证票据的url* @param request* @return*/private String getServiceValidateUrl(HttpServletRequest request) throws IOException {// 1.获取targetUrlString targetUrl = getTargetUrl(request);System.err.println("targetUrl:"+targetUrl);* get请求* @param* @return*/private String doGet(String urlStr) throws IOException {URL url = new URL(urlStr);InputStream in = null;HttpURLConnection conn = null;try {skipSSL();conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5000);conn.connect();in = conn.getInputStream();return IOUtils.toString(in, Charset.forName(CasConfig.UTF_8));} finally {IOUtils.close(conn);IOUtils.closeQuietly(in);}}/*** 绕过SSL验证*/private void skipSSL() {try {HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {public boolean verify(String hostname, SSLSession session) {return true;}});SSLContext context = SSLContext.getInstance("TLS");context.init(null, new X509TrustManager[]{new X509TrustManager() {public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { }public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { }public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}}}, new SecureRandom());HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());} catch (Exception e) {e.printStackTrace();}}public static abstract class IOUtils {private static final int EOF = -1;private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;public static void close(URLConnection conn) {if (conn instanceof HttpURLConnection) {((HttpURLConnection) conn).disconnect();}}public static void closeQuietly(InputStream input) {closeQuietly((Closeable) input);}public static void closeQuietly(Closeable closeable) {try {if (closeable != null) {closeable.close();}} catch (IOException ioe) {// ignore}}public static String toString(InputStream input, Charset encoding) throws IOException {StringWriter sw = new StringWriter();copy(input, sw, encoding);return sw.toString();}public static void copy(InputStream input, Writer output, Charset encoding) throws IOException {encoding = encoding == null ? Charset.defaultCharset() : encoding;InputStreamReader in = new InputStreamReader(input, encoding);copy(in, output);}public static int copy(Reader input, Writer output) throws IOException {long count = copyLarge(input, output);if (count > Integer.MAX_VALUE) {return -1;}return (int) count;}public static long copyLarge(Reader input, Writer output) throws IOException {return copyLarge(input, output, new char[DEFAULT_BUFFER_SIZE]);}public static long copyLarge(Reader input, Writer output, char[] buffer) throws IOException {long count = 0;int n;while (EOF != (n = input.read(buffer))) {output.write(buffer, 0, n);count += n;}return count;}public static InputStream toInputStream(String input, Charset encoding) {return new ByteArrayInputStream(input.getBytes());}}}CasUtilpackage com.zxz.sso.controller;/*** 解析的CAS账户信息*/public class CasVO {private String account;private String userName;public boolean isLogin() {return account != null && !"".equals(account);public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}}CasVO。
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服务,只要输入的用户名跟密码一样,就可以正常登陆,在我们实际开发中,这个验证因为跟数据库作比较,接下来,我们就配置数据库校验。
SSO单点登录Spring-SecurityCAS使用手册
SSO单点登录Spring-SecurityCAS使⽤⼿册1.1概述1.1.1单点登录介绍单点登录(Single Sign On , 简称 SSO )是⽬前⽐较流⾏的服务于企业业务整合的解决⽅案之⼀, SSO 使得在多个应⽤系统中,⽤户只需要登录⼀次就可以访问所有相互信任的应⽤系统。
CAS(Central Authentication Service)是⼀款不错的针对 Web 应⽤的单点登录框架。
本⽂介绍了 CAS 的原理、协议、以及配合Spring-Security在 Tomcat 中的配置和使⽤。
1.1.2 CAS 、Spring Security介绍CAS 是 Yale ⼤学发起的⼀个开源项⽬,旨在为 Web 应⽤系统提供⼀种可靠的单点登录⽅法,CAS 在 2004 年 12 ⽉正式成为 JA-SIG 的⼀个项⽬。
CAS 具有以下特点:开源的企业级单点登录解决⽅案。
CAS Server 为需要独⽴部署的 Web 应⽤。
CAS Client ⽀持⾮常多的客户端(这⾥指单点登录系统中的各个 Web 应⽤),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
Spring Security为基于J2EE企业应⽤软件提供了全⾯安全服务。
Spring Security⼴泛⽀持各种⾝份验证模式。
这些验证模型绝⼤多数都由第三⽅提供,或正在开发的有关标准机构提供的,例如Internet Engineering Task Force。
作为补充,Spring Security也提供了⾃⼰的⼀套验证功能。
1.1.3 CAS 原理和协议从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。
CAS Server 需要独⽴部署,主要负责对⽤户的认证⼯作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。
cas实现单点登出
CAS单点登出原理类似于之前的角色,我们重写单点登出的用例。
用户从application1登出。
交互步骤如下:1.用户在application1点击登出,登出url被转向到Server。
2.Server收到登出请求后,删除用户的cookie,并且从内存中取出之前用户在所有的ap plication中的登录的sessionId,依次向这些application发送消除session请求。
并且删除之前内存中保存的用户登录的ticket号和票据的信息。
3.各个application收到Server的请求后,被single sign out的Filter拦截,根据回传的sessionId号,清除用户session。
4.单点登出完毕。
cas 实现single sign out的原理,如图所示:图一图二第一张图演示了单点登陆的工作原理。
第二张图演示了单点登出的工作原理。
从第一张图中,当一个web浏览器登录到应用服务器时,应用服务器(application)会检测用户的session,如果没有session,则应用服务器会把url跳转到CAS server上,要求用户登录,用户登录成功后,CAS server会记请求的application的url和该用户的sessionId(在应用服务器跳转url时,通过参数传给CAS server)。
此时在CAS服务器会种下TGC Cookie值到webbrowser.拥有该TGC Cookie的webbrowser可以无需登录进入所有建立sso服务的应用服务器application。
在第二张图中,当一个web浏览器要求登退应用服务器,应用服务器(application)会把url跳转到CAS server上的/cas/logout url资源上,CAS server接受请求后,会检测用户的TCG Cookie,把对应的session清除,同时会找到所有通过该TGC sso登录的应用服务器URL提交请求,所有的回调请求中,包含一个参数logoutRequest,内容格式如下:<samlp:LogoutRequest ID="[RANDOM ID]" Version="2.0" IssueInstant="[CURRE NT DATE/TIME]"><saml:NameID>@NOT_USED@</saml:NameID><samlp:SessionIndex>[SESSION IDENTIFIER]</samlp:SessionIndex></samlp:LogoutRequest>所有收到请求的应用服务器application会解析这个参数,取得sessionId,根据这个Id取得session 后,把session删除。
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`方法中使用。
springboot整合CASClient实现单点登陆验证的示例
springboot整合CASClient实现单点登陆验证的⽰例本⽂介绍了spring boot整合CAS Client实现单点登陆验证的⽰例,分享给⼤家,也给⾃⼰留个笔记,具体如下:单点登录( Single Sign-On , 简称 SSO )是⽬前⽐较流⾏的服务于企业业务整合的解决⽅案之⼀, SSO 使得在多个应⽤系统中,⽤户只需要登录⼀次就可以访问所有相互信任的应⽤系统。
CAS Client负责处理对客户端受保护资源的访问请求,需要对请求⽅进⾏⾝份认证时,重定向到 CAS Server 进⾏认证。
(原则上,客户端应⽤不再接受任何的⽤户名密码等 Credentials )。
实现⽅式⼀:使⽤第三⽅的starter1、依赖的jar<dependency><groupId>net.unicon.cas</groupId><artifactId>cas-client-autoconfig-support</artifactId><version>1.4.0-GA</version></dependency>2、增加配置⽂件cas.server-url-prefix=http://127.0.0.1cas.server-login-url=http://127.0.0.1/logincas.client-host-url=http://192.26.4.28:8080cas.validation-type=CAS3、开启CAS Client⽀持@SpringBootApplication@ComponentScan(basePackages={"com.chhliu.emailservice"})@EnableCasClient // 开启CAS⽀持public class Application extends SpringBootServletInitializer{public static void main(String[] args) {SpringApplication.run(Application.class, args);}}通过上⾯的3步,就可以完成CAS的客户端认证了!4、扩展cas.validation-type⽬前⽀持3中⽅式:1、CAS;2、CAS3;3、SAML其他可⽤的配置如下:cas.authentication-url-patternscas.validation-url-patternscas.request-wrapper-url-patternscas.assertion-thread-local-url-patternscas.gatewaye-sessioncas.redirect-after-validationcas.allowed-proxy-chainscas.proxy-callback-urlcas.proxy-receptor-urlcas.accept-any-proxyserver.context-parameters.renew具体的含义从名字上就可以很清楚的看出来。
CAS实现SSO单点登录原理
CAS实现SSO单点登录原理1. CAS 简介简单的 SSO 的体系中,会有下⾯三种⾓⾊:1 , User (多个)2 , Web 应⽤(多个)3 , SSO 认证中⼼( 1 个)虽然 SSO 实现模式千奇百怪,但万变不离其宗:1 Web 应⽤不处理 User 的登录,否则就是多点登陆了,所有的登录都在 SSO 认证中⼼进⾏。
2 SSO 认证中⼼通过⼀些⽅法来告诉 Web 应⽤当前访问⽤户究竟是不是张三 / 李四。
3 SSO 认证中⼼和所有的 Web 应⽤建⽴⼀种信任关系, SSO 认证中⼼对⽤户⾝份正确性的判断会通过某种⽅法告之 Web 应⽤,⽽且判断结果必须被 Web 应⽤信任。
1.1. What is CAS ?CAS ( Central Authentication Service )是 Yale ⼤学发起的⼀个企业级的、开源的项⽬,旨在为 Web 应⽤系统提供⼀种可靠的单点登录解决⽅法(属于 Web SSO )。
CAS 开始于 2001 年,并在 2004 年 12 ⽉正式成为 JA-SIG 的⼀个项⽬。
1.2. 主要特性1、开源的、多协议的 SSO 解决⽅案; Protocols : Custom Protocol 、 CAS 、 OAuth 、 OpenID 、 RESTful API 、 SAML1.1 、SAML2.0 等。
2、⽀持多种认证机制: Active Directory 、 JAAS 、 JDBC 、 LDAP 、 X.509 Certificates 等;3、安全策略:使⽤票据( Ticket )来实现⽀持的认证协议;4、⽀持授权:可以决定哪些服务可以请求和验证服务票据( Service Ticket );5、提供⾼可⽤性:通过把认证过的状态数据存储在 TicketRegistry 组件中,这些组件有很多⽀持分布式环境的实现,如: BerkleyDB 、 Default 、 EhcacheTicketRegistry 、 JDBCTicketRegistry 、 JBOSS TreeCache 、 JpaTicketRegistry 、 MemcacheTicketRegistry 等;6、⽀持多种客户端: Java 、 .Net 、 PHP 、 Perl 、 Apache, uPortal 等。
