`

单向免登录的实现-疑点带解决

阅读更多

什么是免登陆?

免登录也就是平常别人说的免登。比如某某网站登录后可以直接免登到另外某某网站。打个比方,淘宝买好物品下好订单付款时,直接跳转到支付宝的付款页面直接进行付款,而不用再登录支付宝,这个过程就是网站间功能通过免登陆打通了。

一句话概括就是用户在A网站登录后,B网站信任用户在A网站的登录状态,并认为(映射)用户也登录了B网站。

 

免登的实现原理

免登的实现,按照不同系统间的拓扑关系可以有很多不同的实现方式。

如果多个系统,两两间都是需要功能免登打通,依赖关系呈网状,那么可以使用SSO单点登录的方式进行免登。

如果系统间功能免登的依赖关系呈现单项依赖性,那么可以通过通过Token验证技术做到单项免登。

 

单项免登实现步骤

1,创建一个登录控制中心。

登录控制中心提供两个主要的功能,一个是根据源网站的登录请求信息生成目标网站的TVS url(Token Validate Service)及Token,以及为了防止篡改的摘要信息,并将生成的Token及请求信息进行缓存。另一个功能是对目标网站的TVS服务提供Token验证功能,验证通过后返回目标网站来源网站的登录信息表示,比如源网站对应登录的LoginId,那么目标网站就可以根据这个LoginId找到本地用户体系中所对应的登录信息进行本地登录及授权操作了。

 

具体步骤:

1,用户浏览器请求源网站免登目标网站功能的免登链接代理。

2,源网站免登代理接受到请求后,判断用户是否在本网站登录,如果没有登录那么跳转到登录页面让用户登录。如果用户已经登录,那么向登录控制中心提交当前登录用户LoginId、网站SiteId、目标网站TargetUrl、来源页面Ref和客户端IP。

3,免登控制中心首先验证传过来的TargetUrl,是否在已经配置的白名单中,如果存在则找到此TargetURL对应的TVS URL, 然后再随机生成一个不重复的Token,并将此Token和进行一个摘要Sign,然后就把此TVSURl带上Token和摘要Sign信息回传给源网站。

4,源网站重定向用户浏览器到tvsurl,用户浏览器访问目标网站的tvsurl。

5,目标网站tvsurl接收到请求后,通过调用登录控制中心的token验证服务对token、sign、siteId、IP、ref进行校验,如果在校验通后获取源网站对应的登录LoginId,如果此LoginId在目标网站中存在用户映射,那么找到目标网站本地对应的LoginId,并进行登录操作(和普通登录一样,知识因为是已经校验了验证信息,所以不用密码了)记录到浏览器Cookie中。再重定向到源网站带入的targetURL。

6,至此,即完成了从源网站到目标网站的针对制定功能targetURL的免登打通了。

 

注意点:

由于上述6部操作完成后,目标网站对应源网站LoginId的本地用户已经登录状态了,如果此时用户浏览器保持目标网站功能页面不关闭,而源网站登出并换了一个登录用户时,源网站与目标网站两边loginId其实是不对应的,且源网站发起的针对目标网站的功能调用可能会导致两个不对应用户间数据产生不一致,如源网站B用户改了目标网站A用户的信息或关键数据等。

 

对于这种问题如何避免?  

类图

 

序列图

 
 

  • 大小: 86.8 KB
  • 大小: 34.9 KB
分享到:
评论

相关推荐

    基础编程:单向循环链表操作实现-CPP

    基础编程:单向循环链表操作实现_CPP

    单向链表的逆转-详细讲解

    总结来说,逆转单向链表主要通过维护三个指针来实现:一个用于原链表,一个用于新链表,一个作为临时存储。通过改变指针的指向,我们可以将链表的顺序反转,从而实现逆转操作。这个过程不需要额外的内存空间,仅通过...

    单向链表的逆序-Java版本

    附件是.java 文件,实现了单链表的逆序算法,文件绿色安全,仅供学习交流使用,欢迎大家下载学习交流! 首先定义了一个ListNode类来表示链表中的节点,然后在reverseList方法中实现了链表的逆序。reverseList方法...

    单向循环链表实现约瑟夫环.zip

    在提供的"单向循环链表实现约瑟夫环.txt"文件中,可能包含了具体的代码实现或者详细解释,包括节点定义、链表操作(如插入、删除)以及约瑟夫环算法的完整流程。通过阅读和理解这个文件,你可以深入学习如何将理论...

    单向链表的demo - p_node_link.rar

    单向链表是一种基本的数据结构,它在计算机科学中被广泛应用于各种算法和数据结构的实现。这个"p_node_link.rar"压缩包提供了一个C语言实现的单向链表demo,旨在帮助学习者理解链表的基本操作。在Linux环境下,你...

    C#泛型实现单向链表实现

    总的来说,C#中的泛型单向链表实现是一个典型的编程实践,它展示了如何利用泛型提高代码的可重用性,同时利用链表的数据结构特性解决特定问题。通过学习和理解这个主题,开发者可以提升对数据结构和C#特性的掌握,这...

    Java SE程序 类实现单向链表

    Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现...

    C++单向链表的实现

    C++进阶学习——单向链表的实现,相关教程链接如下: http://blog.csdn.net/tennysonsky/article/details/49685199

    机电传动单向数控平台设计---课程设计.zip_4 3 2 1_数控平台设计_机电数控平台_电气选型_联轴器

    机电传动单向数控平台设计 第一章、设计任务 1 2.1设计任务介绍 1 2.2 设计任务明细 2 2.3 设计的基本要求 2 第二章、总体方案设计 2 2.1 设计基本依据 2 2.2 总体方案确定 3 第三章、机械部分设计 4 3.1 导轨的选择...

    C#单向链表的实现

    本文将详细讲解如何在C#中实现单向链表,结合源码解析来帮助你深入理解其内部机制。 首先,我们要知道什么是单向链表。单向链表是由一系列节点组成,每个节点包含两个部分:数据域和指针域。数据域存储实际的数据,...

    一对多单向关联关系实现元源码

    在本案例中,我们将深入探讨如何实现一对多单向关联关系,并通过提供的源码进行分析。 首先,我们定义两个实体:一个是"一"端的实体,我们称它为`Parent`,另一个是"多"端的实体,我们称之为`Child`。在Hibernate中...

    单向循环链表-约瑟夫问题

    单向循环链表-约瑟夫问题

    expect配置单向ssh免密码登录

    为了解决这个问题,我们可以使用`expect`工具来配置SSH单向免密码登录。`expect`是Tcl语言的一个扩展,它能够自动应答交互式程序,如SSH登录过程中的密码提示。 首先,我们来理解SSH密钥对的生成和使用。SSH密钥对...

    单向循环链表-仿学生管理系统[详尽注释]

    单向循环链表是一种常见的数据结构,它在计算机科学中被广泛用于实现各种算法和数据管理,例如在本例中的学生管理系统。与普通单向链表不同,循环链表的最后一个节点指向第一个节点,形成一个闭合的环,使得遍历更加...

    hibernate多对一单向关联关系实现源码

    以上就是关于Hibernate中实现多对一单向关联关系的基本知识,包括如何在实体类中定义关联、如何进行数据库操作以及如何查询关联对象。这个源代码示例应该提供了更具体的实现细节,你可以通过查看和运行它来深入理解...

    萝丽双路单向电调 - B版源码-增加丢信号保护.rar

    【标题】中的“萝丽双路单向电调 - B版源码-增加丢信号保护.rar”揭示了这个压缩包文件包含的是一个针对电子调速器(ESC,Electric Speed Controller)的软件源代码,特别强调了是B版,并且新增了丢信号保护功能。...

    基于pytorch从头实现了单向,多层,双向LSTM,给出了完整使用代码,并与torch自带的LSTM进行了对比实验

    在这个实现中,不仅构建了单向LSTM,还涉及了多层和双向LSTM,这增加了模型捕捉长期依赖关系的能力。双向LSTM通过同时考虑前向和后向的信息流来增强模型的性能。此外,通过对比实验,我们可以了解自定义实现与...

Global site tag (gtag.js) - Google Analytics