`
- 浏览:
25500 次
- 性别:
- 来自:
深圳
-
一、初步方案
最近公司要开发新版系统,有幸和几个组员第一时间进入新版的用户中心的开发,按照公司的要求,新版的用户中心要实现单点登录,建议不使用SESSION,以减轻服务端维护SESSION的成本。于是考虑使用cookie+cache来维护会话,实现单点登录。
但是由于系统存在WAP客户端,不能使用COOKIE,使用COOKIE+cache的方案似乎无法得到解决,而WAP客户端中又存在两个应用,简版和3G彩版,进一步讨论之后,决定WAP之间与WEB之间不同步登陆状态。但是WAP端各应用要进行登录状态同步。
于是出来一个初步的方案,在WEB客户端端使用cookie+cache,在WAP客户端端依然使用session+cache实现单点登录,无论是WEB客户端或者WAP客户端,都调用后台发布的服务,本身并不直接连接数据库,后台服务组集群管理集中式的缓存,各个客户端维护自身的缓存。
1、缓存组件的选择
由于存在WEB端与WAP端,应用都在集群环境中,所以使用一个好的分布式缓存似乎也是项目稳定性的关键,Terracotta+ehcache是个不错的选择,由于hibernate官方推荐的第三方缓存组件是ehcache,如果服务端已经使用了ehcache作为hibernate缓存组件,再对系统进行分布式缓存集成Trracotta,那就显得非常的简单。但我们是开发新的项目,而使用集中式缓存管理策略对分布式缓存的效率和缓存服务器扩展有一定的好处,于是决定采用memcache进行缓存服务器的搭建。
2、会话维护与过期所存在的问题
使用SESSION登录会比较简单,server端可以设置session的过期时间。
而使用COOKIE设置过期时间,浏览器会将COOKIE数据写入硬盘上保存,这时即使用户关闭浏览器,COOKIE文件还未到过期时间还是保存在硬盘上,这就存在一些不安全的隐患,但是如果设置COOKIE的过期时间为一个小于0的数值,则COOKIE保存在客户端的内存中,这样,用户只要不关闭浏览器,COOKIE就不会失效,也会存在一些安全隐患。
用户会话的cache信息也将会有问题,由于cache在创建的时候就会有一个创建时间,创建之后,根据配置的缓存策略来管理缓存元素。cache一旦创建,只要到了配置的过期时间,就一定会销毁缓存元素,这样,客户端的会话即使依然真实存在,也无法通过cache来获取用户的数据,用户的登录状态也将消失。
3,会话维护与过期存在问题的解决方案
使用COOKIE进行会话的维护,为了使得COOKIE的信息尽量的保密和安全,需要对COOKIE进行加密,而由于COOKIE的会话的设计依然存在一些问题,所以使用另外一种方案对COOKIE进行设计,用户登录时,生成一个名为SSO_LOGIN的cookie,此COOKIE保存三个信息,用户名|生成时间|加密数据。用户登录时,将用户名+生成时间+密钥进行MD5加密,然后将用户名,生成时间和MD5的加密数据连起来作为cookie的VALUE值写入客户端,并将COOKIE的过期值设置为负数(关闭浏览器失效),通过后台发布的服务将用户信息写入中心缓存中,这样,用户每进行一次请求,都直接从中心缓存中获取用户信息。当用户客户端的COOKIE失效时,让用户进入登陆流程;当中心缓存中无用户信息时,也让用户进入登陆流程。这样就必须保证用户在活动期间,中心缓存中的用户信息不能过期,有两种解决方案,一是设置缓存策略时间较长,如果用户数比较多,无疑会较大程度的提高服务器管理缓存所花的成本。第二种方案,用户每获取一次信息,则更新一次缓存,将用户信息的缓存策略的过期时间设置和COOKIE的过期时间一致。虽然也在一定程度上提高了缓存管理的成本,但是笔者认为第二种比第一种要好一些。
4,总结
通过以上的分析,可以总结出来整个单点登录的过程:WEB客户端,用户登录时,生成COOKIE和中心缓存,用户每进行一次请求,首先取出COOKIE,验证加密数据;其次取出COOKIE的生成时间与现在的时间进行对比,验证是否过期;再次,若验证通过则调用服务获取缓存中的用户信息并刷新缓存的生成时间,若验证不通过或者过期,则进入用户登录流程;最后,获取到用户信息之后,刷新COOKIE的生成时间,重新写入COOKIE到客户端。这样只要用户的浏览器中存在相关的COOKIE并没有过期(用户关闭浏览器或者在超过设置COOKIE的有效期),则在该域名的路径下面所有的项目都可以获取到用户登录状态和信息。
而WAP端的SSO登录将变得更为简单,用户登录之后,获取服务器分配给用户浏览器的SESSIONID,将SESSIONID作为KEY值,用户信息作为VALUE值生成中心缓存,这样用户访问该域名下的所有的应用,只要使用的是同一个浏览器(SESSIONID无变化),并且在SESSION的有效期内,都可以获取用户信息,同步登录信息,实现单点登录。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
此项目"WEBSSO-单点登录"可能是对SSO实现的一个实例化,涵盖了从设计到实现的全过程,对于理解SSO的工作原理和开发流程具有很高的参考价值。通过学习和研究该项目,开发者可以掌握SSO系统的构建方法,提高在多应用...
本文对单点登录(SSO)技术进行了详细的讨论,从理论到实践,介绍了SSO的概念、分类、优点和实现方法,并结合Web Service提供了一个简单的单点登录技术的实现。 单点登录(SSO)是一种认证和授权机制,允许注册用户...
【标题】"基于共享内存的SSO"技术是一种在多进程环境下实现单点登录(Single Sign-On,简称SSO)的有效方法。它利用操作系统提供的共享内存机制,使得用户登录信息可以在不同的进程之间共享,从而避免了用户在访问多...
应用服务器需要在pom.xml文件中添加相关依赖,例如spring-boot-starter-web和spring-boot-starter-security。 三、单点登录流程 单点登录流程可以分为以下步骤: 1. 用户请求访问应用服务器A 2. 应用服务器A...
从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO和桌面SSO的实现、源代码和详细讲解;还从安全和性能的角度对现有的实现技术进行进一步分析,指出相应的风险和需要改进的方面。本文除了从...
本文档详细介绍了两台domino服务器如何使用“Web服务器配置”和“使用Internet 站点文档”等两种方式建立web sso的详细步骤
**基于Redis的SSO接口文档和教程** 单点登录(Single Sign-On,简称SSO)是一种用户在多个应用系统中只需登录一次,就能在其他所有系统中自由切换并保持登录状态的技术。它简化了用户的登录流程,提高了用户体验。...
### 基于SAP NetWeaver EP的单点登录(SSO)详解 #### 引言 在现代企业的信息化建设中,门户系统作为整合不同应用和服务的重要平台,其与后台Web应用的集成变得日益关键。这不仅涉及到SAP系统如ITS、BSP或WebDynpro...
Java Web SSO(Single Sign-On)实现主要涉及的是在多个应用系统之间实现用户单点登录的功能,即用户只需要登录一次,就能在多个相互信任的应用系统中自由切换,无需再次进行身份验证。SSO的核心思想是将认证过程...
总之,基于Node.js和Express的SSO单点登录实践是一个涉及Web开发、身份验证、数据库操作等多个领域的综合性项目。通过合理的设计和实现,我们可以构建出高效、安全的SSO系统,提升用户体验,同时降低运维复杂度。在...
本项目"SSO+WEBDEMO"是对SSO相关项目的调整和优化,旨在提供一个可以直接部署的学习平台。 SSO的核心组件通常包括: 1. **认证中心(CAS)**:负责处理用户的登录请求,验证用户的身份,并生成安全票据(Ticket ...
基于Cookie的SSO中间件,如标题所提及的"Cookie SSO",在Java Web开发中被广泛使用,因为它能够简化用户的登录流程,提高用户体验,同时在多应用环境中提供了统一的身份管理。 Cookie是Web应用程序在用户浏览器上...
单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。在.Net框架下实现SSO,可以利用微软提供的Identity和Authentication服务,结合...
【描述】"基于PHP的baigo SSO单点登录系统 php版.zip" 指出该系统是用PHP编程语言实现的,这意味着它利用了PHP的灵活性和广泛接受度,以创建一个适用于Web环境的身份验证平台。"php版"强调了这个特定的SSO系统是针对...
3. **基于JWT(JSON Web Token)**:JWT是一种轻量级的身份验证和授权机制,可以安全地在客户端和服务端之间传输信息。用户登录后,服务器返回一个JWT,客户端保存并使用此令牌访问其他服务。 **简单SSO实现步骤** ...
SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次进行身份验证。在Java环境中,实现SSO的一个常见方式是通过Cookie。Kisso是一个基于Cookie的轻量级...
spring security 基于oauth 2.0 实现 sso 单点登录Demo 使用 spring security 基于oauth 2.0 实现 sso 单点登录Demo spring boot + spring security + spring security oauth
基于SAML 2.0 SSO单点登录,包括VS2005,VS2008,VS2010。有部分Java代码。含文档。 client发送saml请求---sso响应验证client是否可信任---可信响应saml----加密saml---发送到client---client解密成功--验证信息...