Springboot系列之⼆⼗⼀:基于Redis实现的单点登录(Demo)
转⾃:
⼀、SSO技术简介
1、基本介绍
⽬前的企业应⽤环境中,往往有很多的应⽤系统,如办公⾃动化(OA)系统,财务管理系统,档案管理系统,信息查询系统等等。这些应⽤系统服务于企业的信息化建设,为企业带来了很好的效益。但是,⽤户在使⽤这些应⽤系统时,并不⽅便。⽤户每次使⽤系统,都必须输⼊⽤户名称和⽤户密码,进⾏⾝份验证;⽽且,应⽤系统不同,⽤户账号就不同,⽤户必须同时牢记多套⽤户名称和⽤户密码。特别是对于应⽤系统数⽬较多,⽤户数⽬也很多的企业,这个问题尤为突出。问题的原因并不是系统开发出现失误,⽽是缺少整体规划,缺乏统⼀的⽤户登录平台。
SSO(Single Sign-On,单点登录)是⾝份管理中的⼀部分。SSO的⼀种较为通俗的定义是:SSO是在多个应⽤系统中,⽤户只需要登录⼀次就可以访问所有相互信任的应⽤系统。它包括可以将这次主要的登录映射到其他应⽤中⽤于同⼀个⽤户的登录的机制。它是⽬前⽐较流⾏的企业业务整合的解决⽅案之⼀。
2、SSO解决的问题
我们在做SSO之前⾸先要明⽩为什么要有单点登录,即SSO在解决什么问题?那么我们先来看⼀下传统的登录实现⽅式:
以上就是传统的登录实现⽅式,但是在并发量⾼的情况下呢?⽐如现在有 2000~3000 的并发,这时⼀
个tomcat 不能满⾜业务需求,需要做集。如下:
那么现在就会出现Session共享的问题(tomcat做集配置session复制。如果集中节点很多,会形成⽹络风暴。推荐节点数量不要超过5个)。此外在分布式架构中,我们会把系统拆分成多个⼦系统,在这些⼦系统之间进⾏跳转时也会出现session不能共享的问题(和上述类似)。
上述这些情况正是SSO要解决的问题!
3、使⽤SSO的好处
⽅便⽤户
⽤户使⽤应⽤系统时,能够⼀次登录,多次使⽤。⽤户不再需要每次输⼊⽤户名称和⽤户密码,也不需要牢记多套⽤户名称和⽤户密码。单点登录平台能够改善⽤户使⽤应⽤系统的体验。
⽅便管理员
系统管理员只需要维护⼀套统⼀的⽤户账号,⽅便、简单。相⽐之下,系统管理员以前需要管理很多套的⽤户账号。每⼀个应⽤系统就有⼀套⽤户账号,不仅给管理上带来不⽅便,⽽且,也容易出现管理漏洞。
简化应⽤系统开发
开发新的应⽤系统时,可以直接使⽤单点登录平台的⽤户认证服务,简化开发流程。单点登录平台通过提供统⼀的认证平台,实现单点登录。因此,应⽤系统并不需要开发⽤户认证程序。
4、实现SSO的技术
基于cookies实现
需要注意如下⼏点:如果是基于两个域名之间传递sessionid的⽅法可能在windows中成⽴,在unix&linux中可能会出现问题;可以基于数据库实现;在安全性⽅⾯可能会作更多的考虑。另外,关于跨域问题,虽然cookies本⾝不跨域,但可以利⽤它实现跨域的SSO。
Broker-based(基于经纪⼈)
validation框架例如Kerberos等,这种技术的特点就是,有⼀个集中的认证和⽤户帐号管理的服务器。经纪⼈给被⽤于进⼀步请求的电⼦的⾝份存取。中央数据库的使⽤减少了管理的代价,并为认证提供⼀个公共和独⽴的”第三⽅”。例如Kerberos、Sesame、IBM
KryptoKnight(凭证库思想)等。
Agent-based(基于代理⼈)
在这种解决⽅案中,有⼀个⾃动地为不同的应⽤程序认证⽤户⾝份的代理程序。这个代理程序需要设计有不同的功能。⽐如, 它可以使⽤⼝令表或加密密钥来⾃动地将认证的负担从⽤户移开。代理⼈被放在服务器上⾯,在服务器的认证系统和客户端认证⽅法之间充当⼀
个”翻译”。例如SSH等。
Token-based
例如SecurID、WebID;现在被⼴泛使⽤的⼝令认证,⽐如FTP,邮件服务器的登录认证,这是⼀种简单易⽤的⽅式,实现⼀个⼝令在多种应⽤当中使⽤。
基于安全断⾔标记语⾔(SAML)实现
SAML(Security Assertion Markup Language,安全断⾔标记语⾔)的出现⼤⼤简化了SSO,并被OASIS批准为SSO的执⾏标准。开源组织OpenSAML 实现了 SAML 规范,可参考/。
⼆、SSO产品介绍
1、SUN SSO技术
1.SUM SSO介绍
SUN SSO技术是Sun Java System Access Manager产品中的⼀个组成部分。
Sun 的新⾝份管理产品包括Sun Java System Identity Manager、Sun Java System Directory Server
Enterprise Edition 和Sun Java System Access Manager,以上三者为Sun Java Identity Management Suite (⾝份识别管理套件)的组成部分,它们与Sun Java Application Platform Suite、Sun Java Availability Suite、Sun Java Communications Suite、Sun Java Web Infrastructure Suite组成Java ES。具有⾰新意义的这⼀系列产品提供端到端⾝份管理,同时可与 60 多种第三⽅资源和技术实现互操作,集成产品可以从SUN公司⽹站下载,⼀般以Agent软件⽅式提供,是业内集成程序最⾼、最为开放的⾝份管理解决⽅案之⼀。
在Sun 的新⾝份管理产品中,Sun Java System Access Manager是基中的⼀个重要组成部分,Java Access Manager基于J2EE 架构,采⽤标准的API,可扩展性强,具有⾼可靠性和⾼可⽤性,应⽤是部署在Servlets容器中的,⽀持分布式,容易部署且有较低的TCO。通过使⽤集中验证点、其于⾓⾊的访问控制以及 SSO,Sun Java System Access Manager 为所有基于 Web 的应⽤程序提供了⼀个可伸缩的安全模型。它简化了信息交换和交易,同时能保护隐私及重要⾝份信息的安全。
2.SUN SSO 实现原理
SSO的核⼼在于统⼀⽤户认证,登录、认证请求通过IDENTITY SERVER服务器完成,然后分发到相应应⽤。SUN SSO是java Access Manager的⼀个组成部分,SSO基于Cookie实现解释如下:
(1)Policy Agent on Web or Application Server intercepts resource requests and enforces access cont
rol;
(2)Client is issued SSO token containing information for session Validation with Session service.
(3)SSO token has no content- just a long random string used as a handle.
(4)Web-based applications use browser session cookies or URL rewriting to issue SSO token.
(5)Non Web applications use the SSO API(Java/c) to obtain the SSO token to validate the users identity.
3.SUN SSO 的应⽤
这⾥说的应⽤是指Sun Java System Access Manager的应⽤。成功应⽤例⼦很多,包括德国电信等公司的应⽤,国内也有⼤量⾼校在使⽤,也有相当多的其它⾏业的应⽤。
2、CAS技术
1.CAS 背景介绍
CAS(Central Authentication Service),是耶鲁⼤学开发的单点登录系统(SSO,single sign-on),
应⽤⼴泛,具有独⽴于平台的,易于理解,⽀持代理功能。CAS系统在各个⼤学如耶鲁⼤学、加州⼤学、剑桥⼤学、⾹港科技⼤学等得到应⽤。
Spring Framework的Acegi安全系统⽀持CAS,并提供了易于使⽤的⽅案。Acegi安全系统,是⼀个⽤于Spring Framework的安全框架,能够和⽬前流⾏的Web容器⽆缝集成。它使⽤了Spring的⽅式提供了安全和认证安全服务,包括使⽤Bean Context,和⾯向接⼝的编程⽅式。因此,Acegi安全系统能够轻松地适⽤于复杂的安全需求。Acegi安全系统在国内外得到了⼴泛的应⽤,有着良好的社区环境。
2.CAS 的设计⽬标
为多个Web应⽤提供单点登录基础设施,同时可以为⾮Web应⽤但拥有Web前端的功能服务提供单点登录的功能;
简化应⽤认证⽤户⾝份的流程;
将⽤户⾝份认证集中于单⼀的Web应⽤,让⽤户简化他们的密码管理,从⽽提⾼安全性;⽽且,当应⽤需要修改⾝份验证的业务逻辑时,不需要到处修改代码。
3.CAS 的实现原理
CAS(Central Authentication Server)被设计成⼀个独⽴的Web应⽤。CAS创建⼀个位数很长的随机数(ticket)。CAS把这个ticket和成功登录的⽤户以及⽤户要访问的service联系起来。例如,如果⽤户peon重定向⾃service S,CAS创建ticket T,这个ticket T 允许peon访问service S。这个ticket是个⼀次性的凭证;它仅仅⽤于peon和仅仅⽤于service S,并且只能使⽤⼀次,使⽤之后马上会过期,即ticket通过验证,CAS⽴即删除该ticket,使它以后不能再使⽤。这样可以保证其安全性。
关于ST,在取⼀个ST时,即使⽤deleteTicket(ticketId)同时将⼀次性的ST删除;⽽对于TGT或PT,则通过resetTimer(ticketId)以更新TGT或PT的时间。在CAS服务端返回的ST中只能得出⽤户名。
三、实现单点登录系统
1、SSO业务流程
2、SSO系统创建
⾸先我们来创建SSO的Maven⼯程,添加依赖如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。