单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。
SSO的用途:
目前的企业应用环境中,往往有很多的应用系统,如办公自动化(OA)系统,财务管理系统,档案管理系统,信息查询系统等等。这些应用系统服务于企业的信息化建设,为企业带来了很好的效益。但是,用户在使用这些应用系统时,并不方便。用户每次使用系统,都必须输入用户名称和用户密码,进行身份验证;而且应用系统不同,用户账号就不同,用户必须同时牢记多套用户名称和用户密码。特别是对于应用系统数目较多,用户数目也很多的企业,这个问题尤为突出。问题的原因并不是系统开发出现失误,而是缺少整体规划,缺乏统一的用户登录平台,使用SSO技术可以解决以上这些问题
SSO的好处:
- 方便用户:从用户实际使用角度考虑
用户使用应用系统时,能够一次登录,多次使用。用户不再需要每次输入用户名称和用户密码,也不需要牢记多套用户名称和用户密码。单点登录平台能够改善用户使用应用系统的体验。
- 方便管理员:从日常维护管理角度考虑
系统管理员只需要维护一套统一的用户账号,方便、简单。相比之下,系统管理员以前需要管理很多套的用户账号。每一个应用系统就有一套用户账号,不仅给管理上带来不方便,而且,也容易出现管理漏洞。
- 简化应用系统开发:从应用扩展角度考虑
开发新的应用系统时,可以直接使用单点登录平台的用户认证服务,简化开发流程。单点登录平台通过提供统一的认证平台,实现单点登录。因此,应用系统并不需要开发用户认证程序。
SSO架构及原理:
单点登录的实质就是安全上下文(Security Context)或凭证(Credential)在多个应用系统之间的传递或共享。当用户登录系统时,客户端根据用户的凭证(例如用户名和密码)为用户建立一个安全上下文,安全上下文包含用于验证用户的安全信息,系统用这个安全上下文和安全策略来判断用户是否具有访问系统资源的权限。
上图中的流程反映出当应用系统调用信息平台所提供的SSO登录过程中的步骤。从上图中,当应用系统或用户访问应用系统的单点登录页面(aspx、JSP、Servlet、ASP)时,应用系统需要检查用户当前请求中是否包含信息平台的单点登录信息(如Cookie)。如果当前请求中包含SSO Token,应用系统应该获取SSO Token的数据,并把SSO Token的数据通过信息平台提供的WebService(或其它方式)对其进行验证。如果当前请求中不包含SSO Token,应用系统可以直接返回登录错误信息给客户端。应用系统可以根据信息平台对SSO Token的验证结果进行相应的处理。
SSO的技术:
- 基于cookies实现:
利用浏览同域名之间自动传递cookies机制,实现两个域名之间系统令牌传递问题;另外,关于跨域问题,虽然cookies本身不跨域,但可以利用它实现跨域的SSO。如:代理、暴露SSO令牌值等。
- Broker-based(基于经纪人)
这种技术的特点就是,有一个集中的认证和用户帐号管理的服务器。经纪人给被用于进一步请求的电子的身份存取。中央数据库的使用减少了管理的代价,并为认证提供一个公共和独立的“第三方”。例如 集团SMAP 、Kerberos、Sesame、IBM KryptoKnight(凭证库思想)等
- Agent-based(基于代理)
在这种解决方案中,有一个自动地为不同的应用程序认证用户身份的代理程序。这个代理程序需要设计有不同的功能。比如, 它可以使用口令表或加密密钥来自动地将认证的负担从用户移开。代理被放在服务器上面,在服务器的认证系统和客户端认证方法之间充当一个“翻译”;例如 SSH等。
- Token-based
现在被广泛使用的口令认证,比如FTP,邮件服务器的登录认证,这是一种简单易用的方式,实现一个口令在多种应用当中使用
- 基于网关
- 基于安全断言标记语言(SAML)实现
SAML(Security Assertion Markup Language,安全断言标记语言)的出现大大简化了SSO,并被OASIS批准为SSO的执行标准。
笔者实现的单点登录:
笔者基于实现成本最低,当然安全系数是最低的基于Cookie的单点登录系统。单点登录的交互过程如下图(图画的不专业,见笑了):
简单描述一个笔者的实现过程
步骤1:用户通过浏览器访问系统A,验证是否有SSO信息
A,系统A首先读取客户端的cookie,若cookie的值为空则转步骤2,否则继续往下判断;
B,读取系统A的Session,若Session与cookie的token值相同,则直接返回用户所访问的页面;若不同则继续转C步骤处理;
C,调用SSO的Web服务【这期间需要对调用web服务的参数如帐号密码进行验证,也可以对访问IP或IP段做访问控制】,验证cookie中的值包含的时间戳是否过期,若过期则转步骤2;若未过期则判断SSO是否被篡改,篡改则转步骤2,未篡改则记录**用户于**时间登录了**系统(还可以记录客户端的相关信息,如OS,Browser,IP等信息)转步骤D;
D,返回用户信息,重新记录Session及cookie信息。
步骤2:无SSO信息,返回重定向信息至用户端,转步骤3
步骤3:用户端收到信息后,跳转至单点登录的统一认证界面
步骤4:单点登录站点接收到页面请求后,将统一认证界面返回给用户
步骤5:用户输入帐号密码进行登录
步骤6:单点服务到数据库中验证用户的信息
步骤7:返回Token信息,将token写入cookie
若验证通过,则将时间戳信息+加密后的用户信息作为token值写入cookie。其中,token的时间戳加上超时时间的1/3>=当前时间,则重新生成一个时间戳及Des加解密用的key、iv;从而保证用户在操作页面时得以延长超时时间。
步骤8:认证通过后系统又重新定到系统A
在刚重定向至系统A时,由于系统A无Session系统,故仍会执行步骤1的判断,调用Web服务去验证token信息(这一步有点重复,不知各位大侠有何更好解决办法。若通过系统A自身调用SSO接口进行验证并记录session或cookie则不存在这个问题),直到在返回后重写cookie。
步骤9:用户通过系统A的链接进入系统B
步骤10:系统B首先判断服务端的Session及客户端的Cookie的Token是否一致。
由于系统B第一次被某个用户访问,故无Session信息,只有Cookie信息
步骤11:调用SSO的Web服务将Token信息传递给SSO进行验证
步骤12:校验Token信息
判断token是否过期,若过期则跳转至SSO登录;未过期则对token进行解密,若不能解密,则token被篡改,重新跳转SSO登录(判断过程跟步骤1一致)
步骤13:返回Token信息,系统B写Session及Cookie
步骤14:将用户向系统B请求的页面返回给用户
以上是本人是根据现在整的单点登录整理出来的思路,有点闭门造车的味道,东西也被我粗制滥造出来了,估计在中小企业还能发挥所长。简单给大家展示一下SSO统一认证的“庐山面目”,如下:
上面的介绍步骤稍微粗略简单了些,还有一些相关的细枝末节没谈及。由于本人非SSO领域的行家,不少地方很不专业,难免被大家贻笑大方,恳请各位前辈们,同行们多多指教。
<script type="text/javascript"></script>
分享到:
相关推荐
SSO单点登录【基于cookie二级域名下跨域共享】的简单实现。
基于SpringBoot实现单点登录的两种方式,第一种(Session):SpringBoot+SpringSession+Redis;第二种基于(Session+Cookie):SpringBoot+Redis(redis集群+池化:一致性Hash分片算法) 实现单点登陆
golang单点登录系统(go-sso) 这是一个基于Go语言开发的单点登录系统,实现手机号注册,手机号+验证码登录,手机号+密码登录,账号登出等功能,用户认证采用cookie和jwt两种方式。方法已提供,仅需根据短信通道提供...
1、 SAML(是否已认证,Subject和资源授权) 2、 Kerberos(OS级SSO) 3、 OpenID(基于URL的SSO) 4、 CAS(基于session的SSO) 5、 基于Cookie 6、 Oauth(应用间的SSO) 7、 NTLM(基于AD的SSO)
基于springboot的sso单点登录框架,涉及的技术有redis缓存,cookie,过滤器,拦截器,能够应用于实际的项目中,方便快捷
SSO单点登录系统运维云平台之单点登录系统,SSO的概念,用途和好处就没有这说明了,总之能接收好接单点登录的系统就可以接,二次开发成本高的系统如果支持LDAP就先接入LDAP,这样运维同学尽可能减少>少应用系统账号...
07.单点登录Cookie和Session存储图解.avi 08.单点登录代码实现(一).avi 09.单点登录代码实现(二).avi 10.单点登录代码实现(三).avi 11.单点登录的流程梳理.avi 12.单点注销的流程分析.avi 13.单点登出代码实现.avi ...
java 基于 Cookie 的 SSO 中间件 kisso 低代码组件库 。
这是一个基于Go语言开发的单点登录系统,实现手机号注册、手机号+验证码登录、手机号+密码登录、账号登出等功能,用户认证采用cookie和jwt两种方式。收发短信相关方法已提供,仅需根据短信通道提供商提供的接口做...
nginx-sso-用于nginx的简单脱机SSO nginx-sso是一个简单的单点登录(SSO)解决方案,可与nginx和nginx auth_request模块一起使用。 就服务提供商而言,它使用ECC公钥签名和cookie以脱机方式对用户进行身份验证。 ...
是一款基于浏览器Cookie和http post的Web应用单点登录系统.WSign采用流行的加密和签名的技术保障单点登录的安全性.An open and well-documented/开放具有良好文档An open-source Java server componen
MaxKey(马克思的钥匙)单点登录认证系统(Single Sign On System),寓意是最大钥匙,是业界领先的企业级IAM身份管理和身份认证产品,支持OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议,提供简单、标准...
本系统为用于实现基于ldap验证或(和)企业微信扫码验证的单点登录系统 通过加解密cookie以及验证api的方式实现单点登录 1 . 登录页 登录界面(可选择ldap登录或企业微信扫码登录) 2 . 用户页 用于用户登录成功后的站点...
本套视频,详解讲解了两套SSO解决方案. 1、基于Cookie跨域特性,实现SSO方案 2、使用第三方框架CAS,实现SSO方案
第一种:同主域但不同子域之间实现单点登陆 Form验证其实是基于身份cookie的验证。客户登陆后,生成一个包含用户身份信息(包含一个ticket)的cookie,这个cookie的名字就是在web.config里Authentication节form设定...
基于JA-SIG CAS框架,设计、实现了一个单点登录统一认证平台,为大型网站提供安全统一的用户身份认证服务。统一认证平台分为SSO CAS服务器端和CAS客户端,服务器端采用SSL加密协议的https方式部署,客户端采用http...
### shop-sso (单点登录系统) SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中, 用户只需要登录一次就可以访问所有相互信任的应用系统。它包括 可以将这次主要的登录映射到其他应用中用于同一个用户...
1.2.Moodle 介绍 Moodle 是澳大利亚教师 Martin Dougiamas 基于建构主义教育理论而开发的课程管理 系统, 是一个免费的开放源代码的软件, 目前在各国已广泛应用。 Moodle 这个词是 Modular Object-Oriented ...
如何在DotNet 2的登录组件中检索用户的锁定状态及解锁? ASP.NET 2.0, 想说爱你不容易 SqlDataSource WEB控件:当DeleteCommandType= 遭遇 ASP.NET 2.0 只读 TextBox 回发后信息丢失的 bug asp.net2.0:扩展...
该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务...