单点登陆解决方案

 
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.    统一登录流程
验证流程如下:
(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
// token loginId 设置入 cookie .
Cookie aCookie;
 
// token
aCookie = new Cookie(“cnlifeUserToken”, userToken);
aCookie.setMaxAge(-1);
aCookie.setDomain(“cnlife365.com”);
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(“cnlife365.com”);
aCookie.setPath("/");
response.addCookie(aCookie);
 
aCookie = new Cookie(“cnlifeUserId” "");
aCookie.setMaxAge(-1);
aCookie.setDomain(“cnlife365.com”);
aCookie.setPath("/");
response.addCookie(aCookie);
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3 是一种用于构建用户界面的 JavaScript 框架,它本身并不直接提供单点登录(Single Sign-On,简称 SSO)的功能。然而,你可以使用其他库或服务来实现单点登录,并在 Vue 3 中集成。 通常情况下,单点登录是通过在多个应用程序之间共享用户身份验证状态来实现的。以下是一种基本的实现方式: 1. 首先,你需要选择一个适合你的单点登录解决方案。常见的选择包括 OAuth 2.0、OpenID Connect 等。这些协议提供了标准化的身份验证和授权机制,以便在多个应用程序之间共享用户凭据。 2. 在你的 Vue 3 应用程序中,你可以使用适合你选择的单点登录解决方案的客户端库或 SDK。这些库通常提供了一些方法和工具,用于处理身份验证和令牌管理等功能。 3. 在你的应用程序中,你需要设置路由守卫(route guards)来保护需要身份验证的页面。当用户访问受保护页面时,路由守卫将检查用户的身份验证状态,并根据需要重定向到单点登录页面。 4. 单点登录过程通常包括重定向到身份提供者(Identity Provider,简称 IDP)的登录页面,进行身份验证,并在成功后重定向回你的应用程序。你需要在应用程序中设置一个回调路由,用于接收身份提供者返回的令牌或授权码。 5. 在接收到令牌或授权码后,你可以将其存储在本地,通常使用浏览器的本地存储或 Vuex 状态管理库进行管理。这样,你的应用程序就可以在后续的请求中使用该令牌来进行身份验证和授权。 需要注意的是,单点登录的实现可能会因所选解决方案而有所不同。具体的步骤和代码可能会因你使用的单点登录库或服务而有所不同。因此,我建议你查阅所选单点登录解决方案的文档,并按照其指导进行集成。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值