SSO单点登录原理及Demo

概述:
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。
SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即 通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。 
为什么需要单点登录:
随着企业的发展,业务系统的数量在不断的增加,老的系统却不能轻易的替换,这会带来很多的开销。其一是管理上的开销,需要维护的系统越来越多。很多系统的 数据是相互冗余和重复的,数据的不一致性会给管理工作带来很大的压力。
企业应用集成(EAI, Enterprise Application Integration)。企业应用集成可以在不同层面上进行:例如在数据存储层面上的“数据大集中”,在传输层面上的“通用数据交换平台”,在应用层面上的“业务流程整合”,和用户界面上的“通用企业门户”等等。事实上,还有一个层面上的集成变得越来越重要,那就是“身份认证”的整合,也就是“单点登录”。
没有单点登录的时候,系统整合是这样:

单点登录的机制:


用户第一次登录系统A时,会被引导到认证系统中进行登录;
根据用户提供的登录信息,认证系统进行身份验证。如果验证成功,会返回给用户一个认证的凭证(ticket);
用户再访问系统B时,会带上这个ticket作为自己认证的凭证。系统B会将这个ticket发送到认证系统中进行验证,检查ticket的合法性;
如果验证通过,用户就不用再次登录,就可以进入系统B了。


简单单点登录应该具备的内容:
所有应用系统共享一个身份认证系统。
统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行效验,判断其有效性。
所有应用系统能够识别和提取ticket信息。
要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对ticket进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。


单点登录需要注意的问题:
单一的用户信息数据库并不是必须的。
有许多系统不能将所有的用户信息都集中存储,应该允许用户信息放置在不同的存储中。事实上,只要统一认证系统,统一ticket的产生和效验,无论用户信息存储在什么地方,都能实现单点登录。
统一的认证系统并不是说只有单个的认证服务器。
整个系统可以存在两个以上的认证服务器,这些服务器甚至可以是不同的产品。认证服务器 之间要通过标准的通讯协议,互相交换认证信息,就能完成更高级别的单点登录。如下图,当用户在访问应用系统1时,由第一个认证服务器进行认证后,得到由此 服务器产生的ticket。当他访问应用系统4的时候,认证服务器2能够识别此ticket是由第一个服务器产生的,通过认证服务器之间标准的通讯协议 (例如SAML)来交换认证信息,仍然能够完成SSO的功能。 




单点登录的好处:
方便用户
用户使用应用系统时,能够一次登录,多次使用。用户不再需要每次输入用户名称和用户密码,也不需要牢记多套用户名称和用户密码。单点登录平台能够改善用户使用应用系统的体验。
方便管理员
系统管理员只需要维护一套统一的用户账号,方便、简单。相比之下,系统管理员以前需要管理很多套的用户账号。每一个应用系统就有一套用户账号,不仅给管理上带来不方便,而且,也容易出现管理漏洞。
简化应用系统开发
开发新的应用系统时,可以直接使用单点登录平台的用户认证服务,简化开发流程。单点登录平台通过提供统一的认证平台,实现单点登录。因此,应用系统并不需要开发用户认证程序。 


单点登录的分类:
跨子域单点登录
所谓的跨子域单点登录,就是A、B站点和P站点位于同一个域下面。比如:A站点为http://www.baidu.com,B站点为http://tieba.itcast.com,P站点为http://fangi.itcast.com。
完全跨域单点登录
所谓的完全跨域单点登录,就是A、B站点没有共同的父域,但仍然可以共用登录。比如:A站点为http://www.baidu.cn,B站点为http://www.sina.cn。


实现单点登录的方式:
基于cookies实现
需要注意如下几点:如果是基于两个域名之间传递sessionid的方法可能在windows中成立,在 unix&linux中可能会出现问题;可以基于数据库实现;在安全性方面可能会作更多的考虑。另外,关于跨域问题,虽然cookies本身不跨 域,但可以利用它实现跨域的SSO。
Broker-based(基于经纪人)
基于经纪人的SSO系统采用一个集中的认证和用户帐号管理服务器,认证服务器扮演着经纪人的角色。当用户访问应用服务器之前,先向经纪人进行主动的身份认证,然后再携带票据许可到授权服务器获取服务票据,用户携带服务票据去请求应用服务器,最终应用服务器验证服务票据后再提供响应服务。
Agent-based(基于代理)
基于代理的SSO系统中存在一个身份认证的代理程序,用户登录服务器时,代理程序将记录其密码并自行发送给其他集成的系统,代替用户进行登录。


Token-based
现在被广泛使用的口令认证,比如FTP,邮件服务器的登录认证,这是一种简单易用的方式,实现一个口令在多种应用当中使用。
基于网关
网关可以是防火墙,也可以是专门用于通信加密的服务器。需要单点登录的服务器都放置在网关隔离的安全网段内。客户端通过认证后获得服务授权。
基于安全断言标记语言(SAML)实现
SAML(Security Assertion Markup Language,安全断言标记语言)的出现大大简化了SSO,并被OASIS批准为SSO的执行标准。开源组织OpenSAML 实现了 SAML 规范,可参考http://www.opensaml.org。


后续会继续上传demo源码!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
单点登录(Single Sign-On,简称SSO)是一种身份认证和授权机制,允许用户使用一组凭据(如用户名和密码)登录到多个应用程序或系统中,而无需为每个应用程序单独进行认证。 SSO的实现原理通常涉及以下几个主要组件: 1. 身份提供者(Identity Provider,简称IdP):身份提供者是负责用户身份验证和授权的中心服务。它维护用户的身份信息,并为用户生成令牌(Token)。 2. 服务提供者(Service Provider,简称SP):服务提供者是需要接受SSO认证的应用程序或系统。它依赖于身份提供者来验证用户身份,并根据用户的授权信息提供相应的服务。 3. 用户代理(User Agent):用户代理是指用户使用的浏览器或移动设备等客户端应用程序。用户代理在用户登录时与身份提供者进行交互,并在成功认证后将令牌发送给服务提供者。 下面是SSO的基本实现流程: 1. 用户访问服务提供者的应用程序,并尚未进行身份验证。 2. 服务提供者检测到用户未经身份验证,将用户重定向到身份提供者的登录页面。 3. 用户在身份提供者的登录页面上输入凭据(如用户名和密码)进行身份验证。 4. 身份提供者验证用户的凭据,并生成一个令牌,其中包含有关用户身份和授权的信息。 5. 身份提供者将令牌返回给用户代理。 6. 用户代理将令牌发送给服务提供者。 7. 服务提供者接收到令牌后,向身份提供者验证令牌的有效性和真实性。 8. 验证成功后,服务提供者将用户标识为已经通过身份验证,并为用户提供相应的服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值