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目录.至此,第一步完成。

实战:C:\Documents and Settings\wangyoushi8>keytool -import -keystore D:/jdk1.5.0_12/jre/lib/security/cacerts -file c:/store/server.crt -alias sjc 输入keystore密码:changeitOwner: CN=localhost, OU=上海神洲数港, O=网络优化, L=郑州, ST=河南, C=Zh发照者:CN=localhost, OU=上海神洲数港, O=网络优化, L=郑州, ST=河南, C=Zh序号:4abd6dd0有效期间:Sat Sep 26 09:26:40 CST 2009 至:Fri Dec 25 09:26:40 CST 2009认证指纹:MD5:F7:19:E9:F8:53:08:B0:15:E7:A4:46:6D:1E:8A:F4:2BSHA1:09:ED:CF:67:D0:F5:C0:A4:96:1D:B1:A3:68:D3:2C:9F:FF:1B:7F:DE信任这个认证?[否]:y认证已添加至keystore中第二步修改服务端Tomcat配置文件,(Tomcat安装路径下的conf/ server.xml 使用编辑工具显示行号在95行处取消注释)即可启用SSL如下:<Connector port="8443" maxHttpHeaderSize="8192"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" disableUploadTimeout="true"acceptCount="100" scheme="https" secure="true"clientAuth="false" sslProtocol="TLS"keystoreFile="c:/store/mykey"keystorePass="sunjuncai"/>只需修改绿色部分。

完成以上两步,测试一下:重启Tomcat后在地址栏输入:https://localhost:8443如果浏览器显示:可以把localhost用本机IP地址,如https://10.87.59.162:8443/试试。

如果配置正确就搞定了,浏览显示的时候提示安装证书。

浏览器的状态栏会显示如图所示:解决办法:a.查看Host文件,c:\windows\system32\drivers\etc\hosts,打开hosts这个文件,看看127.0.0.1和localhost是不是在一行。

b.是否用了代理服务器上网,选中“对于本地址不使用代理服务器。

”第三步部署CAS应用a.CAS服务端的配置CAS Server的下载/cas/downloadCAS Server安装把\cas-server-3.3.3-release\cas-server-3.3.3\modules\cas-server-webapp-3.3.3.war copy到tomcat\webapps下重命名为cas;重启Tomcat后,,检查CAS 应用是否正常启动。

在地址栏输入:https://localhost:8443/cas 如浏览器显示:默认的cas server的验证是只要用户名和密码一样就可以成功登录。

如图:b.CAS客户端配置CAS Client的下载/downloads/cas-clients/把\cas-client-java-2.1.1\dist\ casclient.jar copy到你所发布的webapp的WEB-INF/lib下在客户端web应用中修改WEB-INF/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><filter-name>CASFilter</filter-name><filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class><init-param><param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name><param-value>https://localhost:8443/cas/login</param-value><!--这里的server是服务端的IP--></init-param><init-param><param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name><param-value>https://gaofeng.nmc.hamcc:8443/cas/proxyValidate</param-value><!--这里的ServerName是服务端的主机名也就是CN--></init-param><init-param><param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name><param-value>localhost:8080</param-value><!--client:port就是需要cas需要拦截的地址和端口,一般就是这个tomcat所启动的ip和port--> </init-param></filter><filter-mapping><filter-name>CAS Single Sign Out Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CASFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>到此为止,基本配置已经告一段落。

合集下载

SSO单点登录—CAS统一身份认证

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单点登录配置全过程

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使用手册

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系统的基本使用

简介:单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架,本文介绍了 CAS 的原理、协议、在 Tomcat 中的配置和使用,对于采用 CAS 实现轻量级单点登录解决方案的入门读者具有一定指导作用。

CAS 介绍CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。

CAS 具有以下特点:∙开源的企业级单点登录解决方案。

∙CAS Server 为需要独立部署的 Web 应用。

∙CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

CAS 原理和协议从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。

CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。

图1 是 CAS 最基本的协议过程:图 1. CAS 基础协议CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。

对于访问受保护资源的每个 Web 请求,CAS Client 会分析该请求的 Http 请求中是否包含 Service Ticket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的 CAS Server 登录地址,并传递 Service (也就是要访问的目的资源地址),以便登录成功过后转回该地址。

SSO之CAS单点登录详细搭建

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单点登录系列

小蚂蚁-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实现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 等。

单点登录(SSO)详解

单点登录(SSO)详解背景在企业发展初期,企业使⽤的系统很少,通常⼀个或者两个,每个系统都有⾃⼰的登录模块,运营⼈员每天⽤⾃⼰的账号登录,很⽅便。

但随着企业的发展,⽤到的系统随之增多,运营⼈员在操作不同的系统时,需要多次登录,⽽且每个系统的账号都不⼀样,这对于运营⼈员来说,很不⽅便。

于是,就想到是不是可以在⼀个系统登录,其他系统就不⽤登录了呢?这就是单点登录要解决的问题。

单点登录英⽂全称Single Sign On,简称就是SSO。

它的解释是:在多个应⽤系统中,只需要登录⼀次,就可以访问其他相互信任的应⽤系统。

如图所⽰,图中有4个系统,分别是Application1、Application2、Application3、和SSO。

Application1、Application2、Application3没有登录模块,⽽SSO只有登录模块,没有其他的业务模块,当Application1、Application2、Application3需要登录时,将跳到SSO系统,SSO系统完成登录,其他的应⽤系统也就随之登录了。

这完全符合我们对单点登录(SSO)的定义。

技术实现在说单点登录(SSO)的技术实现之前,我们先说⼀说普通的登录认证机制。

如上图所⽰,我们在浏览器(Browser)中访问⼀个应⽤,这个应⽤需要登录,我们填写完⽤户名和密码后,完成登录认证。

这时,我们在这个⽤户的session中标记登录状态为yes(已登录),同时在浏览器(Browser)中写⼊Cookie,这个Cookie是这个⽤户的唯⼀标识。

下次我们再访问这个应⽤的时候,请求中会带上这个Cookie,服务端会根据这个Cookie找到对应的session,通过session来判断这个⽤户是否登录。

如果不做特殊配置,这个Cookie的名字叫做jsessionid,值在服务端(server)是唯⼀的。

同域下的单点登录⼀个企业⼀般情况下只有⼀个域名,通过⼆级域名区分不同的系统。

CAS单点登录(SSO)服务器配置

CAS单点登录(SSO)服务器配置一、单点登录的概念单点登录(SSO)英文全称Single Sign On,单点登录。

SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。

它是目前比较流行的企业业务整合的解决方案之一。

简单的 SSO 的体系中,会有下面三种角色: 1 、 User (多个) 2 、 Web 应用(多个) 3 、 SSO 认证中心(1 个)虽然 SSO 实现模式千奇百怪,但万变不离其宗:1) Web 应用不处理 User 的登录,否则就是多点登陆了,所有的登录都在 SSO 认证中心进行。

2) SSO 认证中心通过一些方法来告诉 Web 应用当前访问用户究竟是谁。

3) SSO 认证中心和所有的Web 应用建立一种信任关系,SSO 认证中心对用户身份正确性的判断会通过某种方法告之Web 应用,而且判断结果必须被Web 应用信任。

二、单点登录原理当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候,就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket 送到认证系统进行效验,检查ticket的合法性。

如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。

CAS单点登录原理图:三、CAS 单点登录配置1.SSL配置先在CAS官方上下载cas server,解压后找到在modules文件夹中找到cas-server-webapp-3.4.11.war,将文件名更改为cas.war后置于tomcat应用目录下。

因为CAS的服务器验证需要通过SSL来完成,所以SSL对于CAS来说是必须的,SSL 的配置不是本文的重点,我们只是做简要的介绍。

springboot集成CAS实现单点登录的示例代码

springboot集成CAS实现单点登录的⽰例代码最近新参与的项⽬⽤到了cas单点登录,我还不会,这怎么能容忍!空了学习并搭建了⼀个spring-boot 集成CAS 的demo。

实现了单点登录与登出。

单点登录英⽂全称是:Single Sign On,简称SSO。

含义:在多个相互信任的系统中,只要登录⼀个系统其他系统均可访问。

CAS 是⼀种使⽤⼴泛的单点登录实现,分为客户端CAS Client和服务端 CAS Service,客户端就是我们的系统,服务端是认证中⼼,由CAS提供,我们需要稍作修改,启动起来就可以⽤。

~~~~效果演⽰https证书CAS Service 需要⽤https的⽅式,那么就需要证书,可以买也可以⾃⼰⽣成⼀个。

其实这⼀步也可以省略,访问的时候使⽤http即可,只是cas 会给警告。

步骤和把⼤象装进冰箱⼀样简单,总共三步:⽣成密钥⽣成证书导⼊证书1. ⽣成密钥keytool -genkey -alias cainiao -keyalg RSA -keystore E:sslcainiao.keystore参数说明:-genkey ⽣成密钥-keyalg 指定密钥算法,这时指定RSA-alias 指定别名-keystore 指定密钥库存储位置,这⾥存在 E:/ssl/⽬录下在执⾏中会问你很多问题,当问到:您的名字与姓⽒是什么?此时需要填写域名,作为之后的访问地址,其他随意。

执⾏完后⽣成⼀个密钥⽂件 cainiao.keystore2. ⽣成证书keytool -export -alias cainiao -storepass 123456 -file E:/ssl/cainiao.cer -keystore E:/ssl/cainiao.keystore参数说明:-storepass 刚刚⽣成密钥⽂件时候的设置的密码-file指定导出证书的⽂件名为cainiao.cer-keystore指定之前⽣成的密钥⽂件的⽂件名执⾏完后⽬录下会⽣成⼀个cainiao.cer证书3. 导⼊证书keytool -import -alias cainiao -keystore C:/"Program Files"/Java/jdk1.8.0_181/jre/lib/security/cacerts -file E:/ssl/cainiao.cer -trustcacerts将证书导⼊到JDK信任库把原来的$JAVA_HOME/jre/lib/security/cacerts⽂件要先删掉,否则会报出 Keystore was tampered with, or password was incorrect.下⾯是整个过程:PS E:\ssl> keytool -genkey -alias cainiao -keyalg RSA -keystore E:\ssl\cainiao.keystore输⼊密钥库⼝令:再次输⼊新⼝令:您的名字与姓⽒是什么?[Unknown]: 您的组织单位名称是什么?[Unknown]: cainian您的组织名称是什么?[Unknown]: cainiao您所在的城市或区域名称是什么?[Unknown]: wx您所在的省/市/⾃治区名称是什么?[Unknown]: js该单位的双字母国家/地区代码是什么?[Unknown]: CNCN=, OU=cainian, O=cainiao, L=wx, ST=js, C=CN是否正确?[否]: y输⼊ <cainiao> 的密钥⼝令(如果和密钥库⼝令相同, 按回车):再次输⼊新⼝令:------------------------------------------------------------------------------------PS E:\ssl> keytool -export -alias cainiao -storepass 123456 -file E:/ssl/cainiao.cer -keystore E:/ssl/cainiao.keystore存储在⽂件 <E:/ssl/cainiao.cer> 中的证书------------------------------------------------------------------------------------PS E:\ssl> keytool -import -alias cainiao -keystore C:/"Program Files"/Java/jdk1.8.0_181/jre/lib/security/cacerts -file E:/ssl/cainiao.cer -trustcacerts输⼊密钥库⼝令:所有者: CN=, OU=cainian, O=cainiao, L=wx, ST=js, C=CN发布者: CN=, OU=cainian, O=cainiao, L=wx, ST=js, C=CN序列号: 509d1aea有效期为 Wed Jun 17 22:02:55 CST 2020 ⾄ Tue Sep 15 22:02:55 CST 2020证书指纹:MD5: 5B:B2:7C:D7:B7:31:C5:7C:1C:BC:F7:DA:A8:2D:1C:B2SHA1: F6:76:55:55:D7:48:E3:9F:3A:B6:EE:68:1F:BE:DC:DE:51:B1:33:E5SHA256: 24:53:18:CD:E8:95:65:D8:6E:6A:7B:8E:79:CB:91:BD:F4:2E:C3:99:59:D1:76:12:A8:95:45:2A:4B:03:E4:AD签名算法名称: SHA256withRSA主体公共密钥算法: 2048 位 RSA 密钥版本: 3扩展:#1: ObjectId: 2.5.29.14 Criticality=falseSubjectKeyIdentifier [KeyIdentifier [0000: 70 B3 D5 76 36 EA 54 BA 75 C1 A1 5C DA 76 82 0E p..v6.T.u..\.v..0010: 4D F4 C9 05 M...]]是否信任此证书? [否]: y证书已添加到密钥库中最后,hosts 配置127.0.0.1 搭建CAS service1.> 把pom ⾥⾯的<repositories>仓库地址去掉,国外的仓库地址⽐较慢。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档