1.什么是单点登录?

关于单点登录技术的说明参考文章:http://www.cnblogs.com/yupeng/archive/2012/05/24/2517317.html

一般来说,整个原理大家都比较认可。下一步需要关注的是使用什么技术来实现单点登陆。

2.选择什么技术实现单点登录?

经过比较最终选择使用CAS:http://www.oschina.net/p/ja-sig+cas

3.CAS技术研究

3.1CAS下载

CAS分为Server端和client端:

官网地址:https://www.apereo.org/cas

Server端的下载地址:https://www.apereo.org/cas/download

Client端的下载地址:http://downloads.jasig.org/cas-clients/

至于版本选择:Server端选择4.0,Client选择最新版本3.3.3

3.2 CAS服务器安装

现在把Server端和Client端的包下载完成之后,开始进行Server端的服务器搭建。

     1.准备工作

1.在你的安装环境中安装tomcat(jdk就不说了肯定要提前装好的)。

2.在环境变量中设置Path=path;%JAVAHOME%/bin,保证能够运行keytool命令,后面要用到。

3.为了简单测试,在cmd命令窗口中进入tomcat目录。

    2.创建密钥库

使用 JDK 的 keytool 命令生成密钥库(keystore),其实就是一份 keystore 文件,keystore 必须通过密码才能访问。

keystore 里包含了多个密钥对(keypair),每个 keypair 都有一个别名(alias),alias 必须保证唯一性,而且都有一个密码,有此可知,keystore 与 keypair 都有自己的密码。

JDK 也有自己的 keystore,位于 %JAVA_HOME%\jre\lib\security\cacerts,其密码就是 changeit,当然也可以通过 keytool 命令来修改。

我们首先生成 keypair 及其存放 keypair 的 keystore,然后从 keystore 里导出证书,最后将证书导入 JDK 的 keystore 里,Tomcat 在运行时就会自动读取 JDK 的 keystore,以确保所部署的应用可以享受 HTTPS 协议(SSL 通道)带来的安全性。

    2.1生成 keypair

参考命令

    keytool -genkey –alias  -keyalg RSA -keystore tomcatstore

  • -genkey 生成一个证书的密钥
  • -alias 证书别名
  • -keyalg 指定证书的密钥算法
  • -keystore 指定证书库的名称

注意:

  1. 为了简化操作,建议 keystore 与 keypair 的密码相同,且均为 abc123。

  2. 提示“您的名字与姓氏是什么?”,这里需要输入一个域名,如果没有域名,测试可用localhost,但是注意一定不能使用ip地址。

成功之后,会在tomcat目录中生成:

2.2从 keystore 中导出证书

参考命令:

keytool -export -file tomcat.cer -alias tomcat -keystore teststore -storepass abc123

可双击该证书文件,将该证书安装到“受信任的根证书颁发机构”中,这样在浏览器中使用 HTTPS 协议访问时才不会出现一个红色的叉叉。

完成命令之后会在tomcat目录中生成:

2.3 导入证书到 JVM 中

参考命令:

keytool -import -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -file tomcat.cer -alias tomat -storepass changeit

默认情况下,Tomcat 将读取 JVM 中的密钥库,而不是用户目录下的 .keystore 密钥库,当然也可以配置 Tomcat 使其读取指定的密钥库。

3使 Tomcat 支持 HTTPS

1.这里把刚才生成的keystore文件(teststore)复制到%CATALINA_HOME%\conf目录下

2.修改server.conf文件

<Connector SSLEnabled="true" clientAuth="false" keystoreFile="teststore" keystorePass="abc123" maxThreads="150" port="8443" protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true" sslProtocol="TLS"/>

注意事项:
      1.原有的8080端口的connector不变,需要被注释掉的8443端口变成可用,然后在其基础上修改。

2.protocol不能是“HTTP/1.1”

5 运行 CAS 服务器

启动tomcat,在浏览器中输入:

https://localhost:8443/cas-server-webapp-4.0.0

4.0版的默认用户名密码是:casuser/Mellon,输入之后:

退出:

3.3CAS服务器深入配置

上面的初体验仅仅是简单的身份验证,实际应用中肯定是要读取数据库的数据,下面我们来进一步配置CAS服务器怎么读取数据库的信息进行身份验证。 首先打开

tomcat/webapp/cas/WEB-INF/deployerConfigContext.xml
注释掉:
 
在后面添加:
 

修改authenticationManager中的配置【dbAuthHandler】部分:

在apache-tomcat-7.0.54\webapps\cas-server-webapp-4.0.0\WEB-INF\lib中添加jar包:

1.cas-server-support-jdbc-4.0.0.jar

2.c3p0-0.9.1.2.jar

3.ojdbc6-11.2.0.3.jar

此时可以连接oracle进行密码验证了。

注意:

1.使用了MD5验证,也就是数据库中存储MD5加密后的密码。

2.dataSource使用c3p0的配置。

3.主要要建好对应的表结构。

3.3CAS客户端配置

新建一个普通的web工程,其中:

1.在Client工程WEB-INF/lib下添加cas-client-core-3.3.3.jar包,注意把其他的依赖包全部加上。

2.修改web.xml

<!-- ======================== 单点登录/登出 ======================== --><!-- 该过滤器用于实现单点登出功能,可选配置。 --><filter><filter-name>CAS Single Sign Out Filter</filter-name><filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class></filter><!-- 该过滤器负责用户的认证工作,必须启用它 --><filter><filter-name>CAS Authentication Filter</filter-name><filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class><init-param><param-name>casServerLoginUrl</param-name><param-value>https://localhost:8443/cas-server-webapp-4.0.0/login</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://localhost:8080</param-value></init-param></filter><!-- 该过滤器负责对Ticket的校验工作,必须启用它 --><filter><filter-name>CAS Validation Filter</filter-name><filter-class>org.jasig.cas.client.validation.Cas10TicketValidationFilter</filter-class><init-param><param-name>casServerUrlPrefix</param-name><param-value>https://localhost:8443/cas-server-webapp-4.0.0</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://localhost:8080</param-value></init-param><init-param><param-name>redirectAfterValidation</param-name><param-value>true</param-value></init-param></filter><!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 --><filter><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class></filter><!-- 该过滤器使得开发者可以通过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 Single Sign Out Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Authentication Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Validation Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Assertion Thread Local Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><listener><listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class></listener><!-- ======================== 单点登录/登出结束 ======================== -->

注意:

1.4.0的配置跟老版本的不一致。

2.server中的地址最好使用域名,如果没有域名,可以使用localhost。

输入:localhost:8080/firstclient,转向到验证页面。

输入用户名,密码之后,进入firstclient的页面。

按照相同的配置配置secondclient,在firstclient登录之后,直接输入:localhost:8080/secondclient,不需要登录可以直接进入:

参考文档:

http://www.kafeitu.me/sso/2010/11/05/sso-cas-full-course.html

http://my.oschina.net/huangyong/blog/198109

http://my.oschina.net/aiguozhe/blog/160934

http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/

http://blog.csdn.net/kissliux/article/details/17674443

http://alexwangjie.iteye.com/blog/2117552

http://blog.csdn.net/xuke6677/article/details/38845671​

转载于:https://www.cnblogs.com/sdjnzqr/p/4065653.html

单点登录的原理与CAS技术的研究相关推荐

  1. 单点登录终极方案之 CAS 应用及原理

    转载自  单点登录终极方案之 CAS 应用及原理 Cookie的单点登录的实现方式很简单,但是也问题颇多.例如:用户名密码不停传送,增加了被盗号的可能.另外,不能跨域! 1.基于Cookie的单点登录 ...

  2. 单点登录(原理与代码)

    文章目录 一.单点登录简介 SSO 原理(单点登录的过程) SSO 实现技术 SSO 常见方案 二.手写单点登录系统架构(代码篇) 三.单点登录详介(原理篇) 1.登录 2.注销 单点登陆的具体实现: ...

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

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

  4. 单点登录简单原理(应用多系统)

    单点登录原理与简单实现 1.http无状态协议  web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求 ...

  5. Oauth2.0实现单点登录的原理流程,通俗易懂!

    点击上方☝码猿技术专栏 轻松关注,设为星标! 及时获取有趣有料的技术 单点登录是多域名企业站点流行的登录方式.本文以现实生活场景辅助理解,力争彻底理清 OAuth2.0 实现单点登录的原理流程.同时总 ...

  6. 单点登录系统原理与实现,图文并茂

    一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关 ...

  7. 浅析C#中单点登录的原理和使用

    是单点登录? 我想肯定有一部分人"望文生义"的认为单点登录就是一个用户只能在一处登录,其实这是错误的理解(我记得我第一次也是这么理解的). 单点登录指的是多个子系统只需要登录一个, ...

  8. Oauth2.0实现单点登录的原理流程,这次总该懂了!

    单点登录是多域名企业站点流行的登录方式.本文以现实生活场景辅助理解,力争彻底理清 OAuth2.0 实现单点登录的原理流程.同时总结了权限控制的实现方案,及其在微服务架构中的应用. 1 什么是单点登录 ...

  9. Oauth2.0实现单点登录的原理流程

    Oauth2.0实现单点登录的原理流程 1.什么是单点登录 2.OAuth2 认证授权的原理流程 3.基于 SpringBoot 实现认证/授权 4.综合运用 1.什么是单点登录 1.1 多点登录 传 ...

最新文章

  1. Android证书通过keytool获取sha1、sha256、MD5
  2. [Webpack 2] Ensure all source files are included in test coverage reports with Webpack
  3. 安川g7接线端子图_安川G7(IP)+蓝光STB板同步
  4. 一款强大的无损音乐的下载器:洛雪音乐助手手机版
  5. 细心整理近50个ARM开发相关的网站和学习资料
  6. 任务栏可以点,电脑桌面却不显示内容的解决方法
  7. texstudio如何安装cjk宏包_Latex+CJK从安装到使用【1】
  8. python学生成绩管理程序设计总框图_学生成绩管理系统ER图+流程图+组织结构图-课程设计...
  9. 无法加入域--隶属于域、工作组选项为灰色
  10. html中怎么让盒子模型居中,通过box盒子模型给元素内容设置居中
  11. linux lzma命令,linux lzma安装
  12. 手机图片怎么做成笔记 手机照片笔记怎么制作
  13. ASP.NET Core 认证与授权[3]:OAuth OpenID Connect认证
  14. jmeter查看平均响应时间_线上服务平均响应时间太长,怎么排查?
  15. 无数据 无网络view
  16. 2021年Java发展怎么样?现在学了Java技术出来是否还能找到工作?
  17. gardner环 matlab,HighSpeedLogic专题:位同步Gardner环的研究
  18. 射频器件的基本参数1
  19. 用Python生成答题库,辅助完成XX在线平台视频学习的课后考试
  20. 北大青鸟深圳嘉华分享Hibernate基础入门内容

热门文章

  1. java.lang.String cannot be cast to org.apache.flink.table.data.StringData
  2. superset数据集birth_names的负时间戳处理
  3. iamond operator is not supported in -source 1.5
  4. flink的savepoints和checkpoints以及state Query(暂时无法全部完成)
  5. flink1.12在ubuntu下面的编译记录(转载+自己整理)
  6. 真实HDFS集群启动后master的jps没有DataNode
  7. python实现tsne
  8. python行数最短的PCA实现方式
  9. PL/SQL Developer 中文乱码解决
  10. ELSE 技术周刊(2017.11.27期)