`

简单的单点登陆解决方案

    博客分类:
  • SSO
阅读更多
1.            概述
单点登录是指用户在其中一个系统登录之后,用户再漫游至其他相关系统时,不需要重复的登录。真正使用户感觉到“一点登录、全网通行”。
目前比较流行的COOKIE认证的方式。其实现示意图如下:
统一验证由用户首次登陆Web页面时向用户浏览器写一个包含用户账号,用户Token的Cookie信息。并且由应用服务器取得这个信息以后提交到验证服务器数据库中进行注册判断。
如果用户信息注册成功,则在应用服务器上面以Session形式记录下此用户己经正确登陆的信息,以后用户再次登录些应用服务器的时候只要对此Session信息进行判断,如果Session信息存在并且是表示用户正确登陆,则用户通过验证,不需要第二次输入用户名和密码。若Session信息消失,则应用服务器提取用户浏览器中的Cookie信息再次到验证服务器上进行验证,通过验证以后再次在应用服务器端用Session信息将用户信息保存。
如果用户在应用服务器端跳转的话,每跳转到一个新的应用服务器,则应用服务器必须取得用户浏览器端的Cookie信息到验证服务器上进行一次验证,验证通过以后则同样注,Session信息在应用服务器上,以完成对用户验证的通过。
单点认证由用户首次登陆Web页面时向用户浏览器写内存Cookie,目前暂定为(userToken、loginId),同时,为了保证Cookie访问的安全性,需要把Cookie的domain设成统一的domain,只有在访问同一domain的网站才能获取该Cookie。
注:Cookie信息可以根据应用的需要,增加一些公共的字段值,以显示给用户。
3.1.    统一登录流程
验证流程如下:
(1)      当用户首次通过Web登陆时,由Web端计算token值(参见第三方接口实现),并写入以上Cookie信息到浏览器中及以Session形式记录下此用户己经正确登陆的信息
(2)      对于任何一台Web服务器,都是通过以下方法来验证用户身份:
a)              判断Session是否存在,如果存在,则认为验证通过。则b)
b)              如果Session不存在:
I.           判断Cookie信息是否存在,如果都不存在,则(c)
II.       如果Cookie信息存在,则读取Cookie值,根据Cookie值loginId查询中心数据库中对应的密码,并计算userToken的Token值,比较算出的Token值和取出的值是否相等,如果相等则写loginId和userToken的Session值,并让用户通过。否则(c)
c)              转到登录页,让用户输入用户名、密码进行验证,验证通过后,写userToken和loginId的Session值及userToken和loginId的Cookie值。
用户退出登录时,把userToken和loginId的Session值及userToken和loginId的Cookie值清空。
4.             安全性分析
用户的帐号和密码以md5加密的形式保存在Cookie中,而且加入了key,用户难以破解。即便用户可以破解出Cookie值,也只能够根据userName来穷举用户密码和key,而且还要进行加密运算,难度很大,代价昂贵;
用户不可能伪造token值,因为token为加密运算(MD5加密产生32位的数);
用户把浏览器关掉以后,Cookie自动失效,并且是以非文本形式存在,这一点来讲也是比较安全。
登陆信息的传递都是通过Cookie以密文的方式,拦截几乎无可能。
 
 
 
5.            第三方接口实现
5.1.    统一认证接口
统一认证平台提供统一认证的WebService接口服务,具体如下说明:
 
该WebService需要客户端的API 鉴权,访问WebService时请添加用户名和密码。用户名:cnlife 密码:cnlife#^%365
 
l        认证接口
User authenticate(String loginId, String password);
认证通过,返回一个User对象,否则返回null。
 
l        查询基本信息接口
User getUserBaseInfoByLoginId(String loginId);
根据用户的登陆帐号,获取用户的基本信息。查询成功,返回一个User对象,否则返回null。
 
返回的User是标准的Java Bean。定义如下:
User(userId,loginId,password,msisdn,nickName,email,gender)
用户ID    userId     String
登陆帐号 loginId    String
登陆密码 password   String
手机号码 msisdn     String
昵称      nickName   String
电子邮件 email      String
性别      gender     String(1为男,0为女)
 
5.2.    登陆认证流程说明
验证过程说明:用户首次通过Web登陆时,根据登陆帐号和密码在统一平台进行认证,认证通过可获取用户的基本信息。
认证通过后,为了满足SSO的“单点登陆,全网通行”,需要进行一系列的处理,具体过程如下:
1、计算token
2、将loginId和计算出来的tokern置入cookie
// tokenloginId设置入 cookie .
Cookie aCookie;
 
// token
aCookie = new Cookie(“cnlifeUserToken”, userToken);
aCookie.setMaxAge(-1);
aCookie.setDomain(“hyit.edu.cn”);
aCookie.setPath("/");
response.addCookie(aCookie);
 
loginId = new String(loginId.getBytes("GBK"), "ISO8859_1");
aCookie = new Cookie(“cnlifeUserId”, URLEncoder.encode(loginId, "iso-8859-1"));
aCookie.setMaxAge(-1);
aCookie.setDomain(“cnlife365.com”);
aCookie.setPath("/");
response.addCookie(aCookie);
 
完成登陆认证。
 
注:如果是JAVA技术实现的系统,我们将提供API协助完成该操作。
5.3.    漫游登陆流程说明
当用户从A系统漫游到B系统时,B系统需要做以下操作:
1、判断用户在B系统是否存在Session信息,如果存在,用户处于登陆状态,无需再进行以下操作。
2、判断对应的Cookie是否存在
Cookie[] userCookie = request.getCookies();
 
if (userCookie != null)
{
      int cookieLen = userCookie.length;
      for (int i = 0; i < cookieLen; i++)
      {
             String cookieKey = userCookie[i].getName();
             mLogger.info("Cookie Key : " + cookieKey);
             if (cookieKey != null && cookieKey.equalsIgnoreCase(“cnlifeUserToken”))
             {
                    cnlifeUserToken = userCookie[i].getValue();
             }
             if (cookieKey != null && cookieKey.equalsIgnoreCase(“cnlifeUserId”))
             {
                    cnlifeLoginid = URLDecoder.decode(userCookie[i].getValue().toString(), "iso-8859-1");
             }
      }
}
cnlifeLoginid = new String(cnlifeLoginid.getBytes("ISO8859_1"), "GBK");
 
3、如果Cookie不存在,直接到登陆页面
4、如果Cookie存在,使用Cookie中的登陆帐号,到统一认证平台获取用户的基本信息。根据加密规则对用户的基本信息进行计算,获得Token。对这个Token和Cookie中的Token进行比较,如果符合,用户登陆成功。
 
5.4.    用户退出登陆
用户退出登陆的时候,除了清除本系统的相关Session信息,还需要对相关Cookie进行清除。
Cookie aCookie;
aCookie = new Cookie(“cnlifeUserToken”, "");
aCookie.setMaxAge(-1);
aCookie.setDomain(“hyit.edu.cn”);
aCookie.setPath("/");
response.addCookie(aCookie);
 
aCookie = new Cookie(“cnlifeUserId” "");
aCookie.setMaxAge(-1);
aCookie.setDomain(“hyit.edu.cn”);
aCookie.setPath("/");
response.addCookie(aCookie);
分享到:
评论

相关推荐

    单点登录解决方案单点登录解决方案

    ### 单点登录解决方案概述 #### 一、背景与需求 在现代企业的信息化建设中,随着信息技术和网络技术的快速发展,各种应用系统如OA办公自动化系统、HR人力资源管理系统、财务系统、CRM客户关系管理系统等逐渐普及。...

    Java单点登录解决方案

    - `单点登录DEMO_6993043.zip`:可能是一个基础的SSO演示,展示了如何在一个简单的Java应用中集成SSO功能。 这些文件可以帮助开发者理解并实践Java SSO的实现过程,结合实际案例学习和调试,以便更好地掌握SSO的...

    单点登录SSO解决方案之SpringSecurity+JWT实现.docx

    ### 单点登录SSO解决方案之SpringSecurity+JWT实现 #### 一、单点登录(SSO)概述 单点登录(Single Sign-On,简称SSO)是一种认证机制,允许用户仅通过一次登录就能访问同一域下的多个应用程序和服务。这种机制...

    一种轻量级的跨域单点登录解决方案.pdf

    一种轻量级的跨域单点登录解决方案 本文提出了一种轻量级的跨域单点登录解决方案,旨在解决现有单点登录系统设计复杂、实施困难等问题。该方案利用JavaScript和XML技术手段实现,通过在登录中心生成带有登录信息的...

    SSO单点登录实现方案

    单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 本示例简单的实现了SSO认证系统,...

    单点登录单点登录单点登录

    单点登录(Single Sign-On,简称SSO)是一种身份验证技术,它允许用户在通过一次登录验证后,无须再次输入凭证即可访问多个相互关联的应用系统。这一技术大大提升了用户体验,减少了用户记忆和输入多个密码的负担,...

    JEECG 单点登录说明文档

    Kisso的这种设计使得分布式服务部署、单点登录跨域访问等问题变得简单,而使用session则需要复杂的session复制机制和其他解决方案,实现起来更加困难。 JEECG智能开发平台v3的开发指南详细说明了如何集成Kisso实现...

    单点登录解决方案1--暂时没有相关代码

    ### 单点登录解决方案概述 #### 一、什么是单点登录(Single Sign-On, SSO) 单点登录(Single Sign-On,简称SSO)是一种基于Web的应用系统认证机制,允许用户通过一次登录即可访问所有相互信任的应用系统。简单来说...

    Iframe+Cookie实现简单的单点登录

    【标题】:“Iframe+Cookie实现简单的单点登录” 单点登录(Single Sign-On,SSO)是一种身份验证机制,允许用户在多个相互关联的应用系统中登录一次,然后在整个会话期间无需再次输入凭证即可访问这些系统。在本文...

    openmeetings实现简单的单点登录(自动登录)

    在本文中,我们将探讨如何实现OpenMeetings的简单单点登录(SSO,Single Sign-On),即自动登录功能。 单点登录允许用户在一个系统中登录后,无需再次输入凭证即可访问其他相互信任的系统。在OpenMeetings中实现这...

    基于WEB服务单点登录设计与实现

    企业单点登录是企业内部EAI环境用中间件集成多种验证机制实现多种系统来整体的解决方案。 Web Service是基于网络的、分布式的模块化组件,执行特定的任务,遵守具体的技术规范,是自包含、自描述、模块化的应用,...

    单点登录原理与简单实现

    ### 单点登录原理与简单实现 #### 一、单系统登录机制 ##### 1. HTTP无状态协议 - **HTTP特性**:HTTP是HyperText Transfer Protocol(超文本传输协议)的缩写,是一种用于从Web服务器传输超文本到本地浏览器的...

    用户单点登录的一个简单实例

    在本实例中,我们将探讨如何实现一个简单的用户单点登录系统,其主要目标是确保同一时间只有一个用户在线。这样的功能在某些场景下很有用,比如限制设备共享、保护敏感数据或者防止恶意多账号操作。 实现SSO的关键...

    CAS实现sso单点登录原理

    CAS(Central Authentication Service)是Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于Web SSO)。CAS开始于2001年,并在2004年12月正式成为JA-SIG的一个项目。...

    asp.net单系统的单点登录

    在这个场景中,我们看到的是一个简单的ASP.NET单系统的单点登录实现。 首先,当用户通过用户名和密码验证成功后,系统会调用`WriteOnline`方法。这个方法的作用是将登录的用户ID存储在一个全局的`Application`对象...

    关于SSO单点登录的简单实现

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次进行身份验证。这个过程提高了用户体验,同时也简化了安全管理。在本文中,我们将探讨SSO的基本原理...

    单点登录的简单实现 在门户项目中

    单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统上登录后,无需再次输入凭证即可访问多个相互关联的系统。在门户项目中,实现SSO能够提供无缝的用户体验,提高工作效率,同时降低...

Global site tag (gtag.js) - Google Analytics