软件工程-使用CAS实现SSO简洁教程
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目录.至此,第一步完成。
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、OAuth2

SSO、单点登录、集成CAS、OAuth2JeeSite 已经默认集成了两种单点登录方式(Single Sign On):1、SSO(简单登录)接口,实现快速登录系统。
2、与 Apereo CAS 服务器集成,快速实现系统登录(个人版)并实现了第三方登录 OAuth2,如:微信、QQ、支付宝、等等简单登录接口系统登录:1、设置application.yml(v4.0.x:jeesite.yml)的shiro.sso.secretKey 快速登录安全Key,若不设置将无法使用该接口。
shiro:# 简单 SSO 登录相关配置sso:# 如果启用/sso/{username}/{token}单点登录,请修改此安全key并与单点登录系统key一致。
secretKey: thinkgem# 是否加密单点登录安全KeyencryptKey: true2、举例调用地址如下,调用完成后自动登录系统:http://localhost/project/sso/{username}/{token}?url=/sys/us er/list?p1=v1%26p2=v2&relogin=true•username: 登录名,数据库中的 login_code 字段。
•token: 登录令牌,根据yml里配置的登录安全Key生产的密码。
•url: 登录之后要跳转的地址,如果url中携带参数,请使用转义字符,如“&”号,使用“%26”转义。
token生成方式:String username = "system"; // 登录系统名String secretKey = "thinkgem"; // yml 中设置的shiro.sso.secretKey 参数值。
String token = Md5Utils.md5(secretKey + username +DateUtils.getDate("yyyyMMdd"));// 如果 shiro.sso.encryptKey 为 true,则 secretKey 会自动加密。
基于CAS协议单点登录系统的改进与实现

基于CAS协议单点登录系统的改进与实现作者:赵侃侃戴佳男来源:《计算机与网络》2020年第09期摘要:单点登录(SSO)技术已成为现今Web应用系统广泛采用的集中认证授权技术,在比较分析了4种典型的单点登录实现方案的基础上,选择并改进了基于CAS协议的单点登录系统。
由于前后端分离开发部署的Web应用不能直接使用CAS协议的单点登录系统,改进并重新封装了基于CAS协议的单点登录系统客户端插件,使之既能支持前后端分离开发部署的Web应用,也能支持前后端集中开发部署的Web应用直接使用而无需应用修改代码,实现了应用的无侵入性集成CAS協议的单点登录系统功能。
关键词:单点登录;Web应用;CAS协议中图分类号:TP393文献标志码:A文章编号:1008-1739(2020)09-68-40引言随着B/S架构的Web应用系统越来越广泛地普及和发展,“一次验证,多次登陆”的单点登录技术[1]也应运而生。
单点登录技术是用户只登录一次,就可以访问所有接入单点登录服务的应用系统的技术。
通过建立一个集中的认证服务器,并在应用系统中配置请求拦截器等方式验证用户的登录状态并控制请求的跳转功能,从而实现单点登录功能。
单点登录功能不需要用户记忆各大应用系统的不同的用户名和密码,减少了用户在多个系统间登录的操作。
另外,单点登录技术抽取了用户认证和授权功能,第三方接入单点登录服务的Web应用系统将认证授权功能交由单点登录系统处理,这样有助于第三方应用更加专注自身业务的设计和开发。
对于多套应用系统的企业来说,单点登录功能也被很多企业,尤其是国外的相关企业采用,这是作为应用系统设计初期就必须具备的基本功能[2]。
1常用单点登录方案目前常用的几种单点登录协议有基于SAML协议的单点登录方案[3]、基于Kerberos身份认证机制的单点登录方案[4]、基于Passport协议的单点登录方案[5]及基于CAS协议的单点登录方案[6]。
SAML是一种基于XML标准的安全断言标记语言,用于安全传输声明。
CAS实现SSO单点登录原理

CAS实现SSO单点登录原理CAS(Central Authentication Service)是一种用于实现SSO (Single Sign-On)单点登录的开源协议和软件系统。
它提供了一种安全的方式,使用户只需一次登录,即可访问多个互联网应用程序。
CAS的工作原理可以分为以下几个步骤:1.用户访问应用程序A,并尚未通过CAS进行认证。
应用程序A会将用户重定向到CAS服务器,请求用户认证。
2. 用户输入用户名和密码,并提交给CAS服务器进行认证。
CAS服务器会验证用户的身份,并在成功通过认证后,生成用户唯一的票据(Ticket)。
3.CAS服务器返回该票据给应用程序A,应用程序A将该票据转发给用户浏览器。
4.用户浏览器将该票据作为参数,重定向至CAS服务器,并请求票据验证。
5.CAS服务器根据票据验证的结果,返回成功或失败的认证结果给用户浏览器。
6.用户浏览器在收到认证结果后,将结果传递给应用程序A。
7.应用程序A根据认证结果,判断用户是否通过认证。
如果通过认证,则允许用户访问应用程序A的资源。
以上是CAS的基本工作流程。
在实际应用中,还可以结合其他技术来增强CAS的功能和安全性,例如使用SSL(Secure Sockets Layer)加密通信,确保用户登录过程中的数据传输安全;使用LDAP(LightweightDirectory Access Protocol)或数据库等存储用户账户信息;使用SPNEGO(Simple and Protected GSSAPI Negotiation Mechanism)协议实现单点登录与Windows集成等。
CAS的优点包括:1.单点登录:用户只需一次登录,即可访问多个应用程序,提高了用户体验和工作效率。
2.安全性:CAS通过票据来验证用户的身份,避免了用户密码在多个应用程序之间传递,提高了安全性。
3.可扩展性:CAS是基于开放标准的协议,可以与各种技术和系统集成,非常灵活和可扩展。
单点登录原理及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_SSO配置手册(全)

CAS单点登陆配置手册1、Yale CAS简介CAS 是Yale (耶鲁)大学发起的一个开源项目,旨在为Web 应用系统提供一种可靠的单点登录方法,CAS 在2004 年12 月正式成为JA-SIG 的一个项目。
CAS 具有以下特点:•开源的企业级单点登录解决方案。
•CAS Server 为需要独立部署的Web 应用。
•CAS Client 支持非常多的客户端(这里指单点登录系统中的各个Web 应用),包括Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
2、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 (也就是要访问的目的资源地址),以便登录成功过后转回该地址。
用户在第3 步中输入认证信息,如果登录成功,CAS Server 随机产生一个相当长度、唯一、不可伪造的Service Ticket,并缓存以待将来验证,之后系统自动重定向到Service 所在地址,并为客户端浏览器设置一个Ticket Granted Cookie(TGC),CAS Client 在拿到Service 和新产生的Ticket 过后,在第5,6 步中与CAS Server 进行身份合适,以确保Service Ticket 的合法性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录0. 文档介绍 (2)0.1文档目的 (2)0.2文档范围 (2)0.3读者对象 (2)0.4参考文献 (2)0.5术语与缩写解释 (2)1.概述 (3)1.1背景 (3)1.2环境 (3)1.3下载资源 (3)2. 配置CAS SERVER (4)2.1简单配置 (4)2.2数据库验证配置 (5)2.3参数配置 (8)2.4HTTPS验证配置 (10)2.5自定义页面 (13)3. 配置JAVA CLIENT (16)3.1HTTPS验证 (16)3.2HTTP验证 (18)4. 配置DOTNET CLIENT (19)5. 配置PHP CLIENT (23)6. 如何实现单点注销 (23)0. 文档介绍0.1 文档目的记录使用CAS实现SSO的过程。
0.2 文档范围使用CAS实现SSO的过程。
0.3 读者对象任何有兴趣的家伙。
0.4 参考文献提示:列出本文档的所有参考文献(可以是非正式出版物),格式如下:[标识符] 作者,文献名称,出版单位(或归属单位),日期大部分都是网络上查询的资料,很多,不列举了。
0.5 术语与缩写解释1.概述1.1背景单点登录是必须的,实现方式颇多,这里就说使用CAS的实现方式。
使用CAS实现SSO,网络上说明很多,大部分都是从制作证书开始,而实际上是可以不使用HTTPS 验证,这样更方便。
单点登录的原理是通过拦截你设定的URL,并跳转到你指定的CAS SERVER登录页,当你登录成功后,带着TICKET,返回到你打开的URL。
然后你就可以一票在手,畅通无阻。
网上有个家伙用旅游的套票来解释单点登录,非常形象。
当你到达一个旅游区门口,你可以买一个套票,套票规定你可以游览N个景点,进入这些景点的时候,你不需要再买票,也就实现了单点登录。
同时,也可以借用这个比喻说明一下单点注销。
当你打开一个应用A时,单击了注销按钮,跳转到http://hostname:port/cas/logout或者https://hostname:port/cas/logout,系统显示注销成功。
此时,IE窗口没有关闭,你继续打开应用A,仍然没有注销成功,不需要登录。
这就相当于你已经在旅游景点内,即使你把套票撕毁了,你仍然可以继续参观这个景点,不会把你驱逐出去。
但是,你再也进不了其它的景点了。
那么怎么实现立即生效的注销呢?或者这种方式是否就满足我们的需求呢?1.2环境Windows XP、JDK1.6.03、Tomcat6.0.20注意:配置好环境变量。
1.3下载资源服务器端:/downloads/cas当前最新版本是3.3.4,测试安装的版本为3.3.3cas-server-3.3.3-release.zip客户端:https:///svn/cas-clients/cas-client-2.0.11.zip JAVA支持单点登录cas-client-3.1.8-release.zip JAVA支持单点注销dotnet-client DOTNET支持类phpcas PHP支持注意:同时要下载源代码,部分功能需要修改源代码,重新做包。
2. 配置CAS SERVERCAS SERVER目录介绍。
2.1简单配置把你下载cas-server解压,进入cas-server-3.3\modules,复制cas-server-webapp-3.3.war 到tomcat\webapps下,修改名称为cas.war,方便使用,原来的名字太长了。
然后启动IE,输入http://localhost:8080/cas检验是否可以访问,如果可以,则输入相同的用户名和密码,比如cas/cas,测试是否能登录。
如果你对安全性要求不高且急不可待,这个时候就可以直接进行CAS CLIENT的配置。
2.2数据库验证配置简单配置后,可以使用相同的用户名和密码,进行登录。
这个不实际,可以通过配置实现连接自己的数据库进行配置。
这里有个前提,就是所有系统需要使用相同的用户表和密码加密方法,可以使用CAS自带的加密方法(\org\jasig\cas\authentication\handler\ DefaultPasswordEncoder.class)或自己用JAVA写的加密方法。
进入目录tomcat\webapps\cas\WEB-INF,打开文件deployerConfigContext.xml,找到类似下面的代码:注意:cas-server根据版本不同,文件的路径或BEAN位置可能不同,逐个文件夹找下。
<beanclass="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticat ionHandler" />这是默认的方法。
同时还有两种可选,如下:<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"><property name="dataSource" ref="casDataSource" /><property name="sql" value="select password from tbUser where lower(name) = lower(?)" /></bean>/************************************************************************/<bean class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"abstract="false" lazy-init="default" autowire="default" dependency-check="default"><property name="dataSource" ref="casDataSource" /><property name="tableUsers" value="tbUser" /><property name="fieldUser" value="u_userid"/><property name="fieldPassword" value="u_password"/><property name="passwordEncoder" ref="passwordEncoder"/></bean>以上两种方式都经过测试。
另外,也可以写出自己的方法验证,修改BEAN的CLASS 属性即可。
如果没有密码没有加密,则可以把参数<property name="passwordEncoder" ref="passwordEncoder"/>去掉。
下面针对最下面的方法进行说明。
看它的属性,还需要定义两个BEAN,数据源和加密,如下:<bean id="casDataSource" class="mons.dbcp.BasicDataSource"><!—SQL SERVER<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property><property name="url" value="jdbc:sqlserver://10.7.3.90:1433;DatabaseName=itacc"></property><property name="username" value="zero" /><property name="password" value="123456" />--><!--ORACLE<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property><property name="url" value="jdbc:oracle:thin:@10.7.3.90:1521:orcl"></property><property name="username" value="zero"></property><property name="password" value="123456"></property><property name="maxActive" value="100"></property><property name="maxIdle" value="30"></property><property name="maxWait" value="500"></property><property name="defaultAutoCommit" value="true"></property></bean><!—加密<bean id="passwordEncoder"class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"autowire="byName"><constructor-arg value="MD5"/></bean>由于CAS-SERVER.WAR默认没有采用数据库加密,所以部分JAR包,没有引入,下面这些需要复制到webapps\cas\WEB-INF\lib里面:Cas-server-support-jdbc-3.3.3.jarCas-server-support-ldap-3.3.3.jarCommons-dbcp.jarCommons-pool.jarOrg.springframework.jdbc-3.0.0.M4.jar //spring要根据自己的版本选择Org.springframework.transaction-3.0.0.M4.jarSqljdbc.jar //数据库连接JAR,根据自己的复制Oraclejdbc.jar完成以后,用户表数据准备好后,可以运行http://localhost:8080/cas进行登录测试。