在结构设计上复用性是一个很重要的特征,昨天半夜我发的系统地非侵入性也是很重要的,有同志邀我看看他的SSO系统,不过看后都我觉得不甚满意,如果要服用的话需要把分散的代码一点点抠出来,然后经过反复的修改调试后才能在新的系统中使用,那位老兄的SSO系统功能可能确实强大,而且还用了新技术,不过在复用性上我看还是没有摆脱集成上的痛苦,作过系统集成的同学们肯定对此深有感触。
昨天才批判了很多同学写东西语焉不详,结果回头就自己给了自己一耳巴子,上几篇关于SSO的描述都不够详细,于是这里在手把手系列里我们来一起看看如何设计一个高度可服用的SSO模块,这里我们假设所有的站点都使用.NET,因为成熟的SSO需要和采用各种不同技术的站点之间实现SSO,于是有JAVA,PHP,COM+,.NET多种形式的PSO模块。这里我们精力有限,所以先假设都用.NET,如果你会JAVA也可以自己用java来实现PSO。
一般来说单点认证都需要两端来完成,在认证中心端的我们称之为SSO,在网站端的模块我们称之为PSO。两个模块之间采用二次重定向技术来实现同步两端票据的方式来实现单点登陆
首先我们就来看看这两个模块式如何配合来完成单点认证的
第一个场景是用户首先访问认证中心登陆再去进入成员网站的情况:
首先是登陆后产生一个SSO的票据,这个票据是最重要的,因为它是决定用户是否登陆的关键。这个票据可以是Cookie,也可以是Session,我比较倾向于Cookie,因为现在有3DES加密,加密后篡改Cookie几乎成为不可能,所以无论是对于服务器负担来说还是安全性都是Cookie比较好,可能人认为万一不支持Cookie呢,不过我想Demo应该没问题吧,大不了我设计成两个都支持:},
PS,为什么不用非对称加密?其实那个效率不高,3DES的安全性已经足够了,至少现在还没有人宣称能破解
在登陆后就可以通知用户你已经登陆了,现在你可以去访问成员站点了,这个时候用户点击了成员站点的URL,进去了,这个时候首先就需要接受PSO组件的盘查,你有没有PSO的票据呢?很显然是没有的,所以这个时候请求就被Redirect回了认证中心,认证中心检查用户已经有了SSO的票据了,认为用户已经登录了,就把用户的SSO票据附加在URL后边然后Redirect回成员站点,成员站点的PSO这个时候获取到了SSO票据,于是知道了用户已经在认证端登录了,于是就创建一个PSO票据,然后返回给用户他所请求的内容。所以我们来看看其实PSO的逻辑更加复杂一点。
SSO的逻辑:
PSO的逻辑:
这里我们可以看到其实两个模块的功能都不算复杂,这里存在几个现实的问题,第一个是加密问题,票据需要加密,传输的URL也需要加密。
还有一个就是上一次我上篇文章里说的,在SSO把票据通过URL发送给PSO的时候,如果我们能够截获这个URL,不管他加没有加密,在下一次我们直接用这个URL去访问站点的时候因为已经包含SSO票据了,所以PSO会认为已经登陆了而直接产生PSO票据然后就让用户进去了,这显然是一个漏洞。所以呢,我们需要在这里给这个URL加一点盐值(所谓盐值其实就是加点料),我们通过在URL里加入时间戳来让这个URL具备时间限制,这个样子URL具备失效期,过了这个时间即使截获到了这个URL也完全没有作用了。
下一篇我们来看看所需要的数据结构和系统的架构设计如何防止侵入
to be continue......
分享到:
相关推荐
在本资源包中,提供了关于SSO组件的设计与实现的相关源代码和文档,非常适合IT专业人员进行学习和研究。 SSO的核心原理是通过一个中央认证服务(Central Authentication Service,CAS)来统一管理用户的登录状态。...
本项目提供了一款基于C#编写的SSO组件源码,其设计思路类似于微软的认证服务器和Web应用服务器,能够实现跨域和跨服务器的身份验证。 首先,理解C#中的SSO实现原理至关重要。SSO的核心在于票据(Ticket)的概念,当...
单点登录SSO的实现原理 单点登录(SSO)是一种常见的技术实现原理,在多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。实现单点登录说到底就是要...
SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在多个相互关联的应用系统中只需要登录一次,即可访问所有...了解SSO的实现原理和源码分析,对于IT从业者来说,无论是系统设计还是故障排查,都将大有裨益。
"CAS实现sso单点登录原理" CAS(Central Authentication Service)是Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于Web SSO)。CAS开始于2001年,并在2004年12月...
本文将深入探讨SSO的原理以及如何在Java环境中实现它。 ### SSO的原理 1. **票据概念**:在SSO中,票据(Ticket)是验证用户身份的关键。当用户成功登录到认证中心(Authentication Center,通常称为CAS)时,CAS...
### Domino服务器SSO原理详解 #### 一、引言 单点登录(Single Sign-On,简称SSO)是一种用户身份认证技术,允许用户通过一次登录即可访问多个应用系统,而无需再次输入凭证。这种机制提高了用户体验,同时也提升...
本详细设计说明书的下篇将深入探讨SSO的核心原理、实现方式及具体的设计方案。 首先,SSO的关键在于共享用户认证信息。在描述中提到的流程图可能展示了用户从访问一个应用系统开始,通过SSO服务进行身份验证,然后...
CAS(Central Authentication Service)是一种广泛使用的开放源码的单点登录(Single ...在提供的文档《手把手教你利用CAS实现单点登录.docx》中,你将找到更详细的步骤和示例代码,帮助你更好地理解和实施CAS SSO。
后续请求时,如果携带此Cookie,CAS Server可验证其有效性,实现无感知的SSO。 5. **协议流程**: - 用户尝试访问服务提供者。 - 服务提供者重定向用户到CAS Server,同时传递一个服务URL。 - 用户在CAS Server...
综上所述,CAS SSO原理是通过中心化的认证服务器和分散的客户端协同工作,实现了用户只需一次登录即可访问多个应用系统的功能。这种设计既方便了用户,又简化了系统管理员的身份管理,同时保持了一定的安全性。然而...
单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次...在实际应用中,SSO系统的设计还需要考虑安全性、性能、可扩展性以及与其他系统集成的复杂性。
**基于Redis的SSO接口文档和教程** 单点登录(Single Sign-On,简称SSO)是一种用户在多个应用系统中只需登录...通过理解SSO的基本原理和Redis的角色,开发者能够构建出高效、安全的单点登录系统,提升用户服务体验。
SSO的实现可能涉及以下组件: - **身份提供者(IdP)**:负责用户身份验证和令牌的签发,是SSO的关键部分。 - **服务提供者(SP)**:是用户试图访问的应用,依赖于IdP进行身份验证。 - **令牌**:安全的凭证,通常...
本课程主要通过CAS来实现SSO,本教程会从最基本的基础知识讲起,由浅入深再到实战,完成多应用的单点登录功能。 本课程内容如下: 1、 什么是SSO和CAS 2、 CAS Server服务端和客户端的搭建和配置 3、 单点登录和单...
本文将深入探讨跨域SSO的原理、实现技术和相关案例。 **一、SSO原理** SSO的核心原理是共享用户身份信息。当用户在主域登录成功后,系统会生成一个安全的认证令牌(Token),这个令牌包含了用户的身份信息。当用户...
- **系统设计**:设计SSO的整体架构,包括各个组件之间的交互逻辑。 - **开发与测试**:实现SSO功能,并进行严格的测试确保系统的稳定性和安全性。 - **部署与运维**:完成项目的上线部署,并进行日常的监控和维护...
SSO(Single Sign-On)是单点登录的缩写,是一种网络用户认证的机制,它允许用户在一次登录后,可以访问多个相互信任的应用系统,而无需...在阅读文档和实践操作的过程中,你将深入理解SSO的工作原理和CAS的实施细节。
在Spring Boot中,我们可以使用Spring Security作为安全组件,它提供了一套完整的SSO解决方案。以下是一些关键步骤: 1. **添加依赖**:在`pom.xml`或`build.gradle`中引入Spring Security相关依赖。 2. **配置SSO*...