`

多个站点单点登录的设计思路

 
阅读更多

     当前各门户一般也都实现了多个业务之间的单点登录。下面根据我经历过的项目,谈一下我自己的看法。

 

     一般来说单点认证都需要两端来完成,在认证中心端的我们称之为SSO,在网站端的模块我们称之为PSO。两个模块之间采用二次重定向技术来实现同步两端票据的方式来实现单点登陆。

为什么需要单点登录

      产品刚上线时,一般由于用户量少,所有的功能都放在一起,一般也不需要具体的单点登录。随着用户量和业务发展的需要,要求逐步将产品按功能或性能分为相应独立的站点,并分开部署,这就需要在各个站点之间进行单点登录,以达到用户一次登录,就可以使用多个站点。

单点登录的实现

       简单方法: 在同一个域内的站点,可以简单的通过共享Cookie(将登录用户名存放Cookie中)来实现单点登录。这种方法实现简单,安全性方法可以通过将Cookie值加密方式加强,但对不同域下及不同开发语言下(如A站点C#,B站点C)实现麻烦。

推荐方法:建立统一的认证中心,认证中心提供:

  • 用户登录认证(认证用户名和密码),如果成功,返回表示本次登录的登录Token
  • 登录Token认证(认证Token是否正确),如果成功,返回当前登录的用户名
  • 延长Token有效期
  • 退出(使Token失效)

认证中心独立于各个站点,单点流程一般场景如下:

  • 用户在站点A输入用户名和密码点击登录
  • 站点A将用户名和密码转发给认证中心进行认证,认证中心返回Token
  • 站点A将当前登录用户和Token存入Session(或Cookie)
  • 在站点A上点击连接访问站点B,通过URL参数方式,将Token带给站点B
  • 站点B将Token转交到认证中心,认证正确,返回当前用户名。
  • 站点B将当前登录用户和Token存入Session(或Cookie),完成登录流程

这样的设计下的Token,还可以用在异步使用Ajax去访问服务器端的接口(接口可能独立部署在不同的站点下),这样只需要带上Token,服务器端的接口认证Token通过后,直接返回这个登录用户的相应用户信息。

安全性考虑

  • 用户登录认证接口,可增加认证频率、认证IP等限制,防止暴力攻击。
  • Token其实就是一串表示本次登录的唯一字符串,可以生成字符串时,增加摘要信息。如Token的组成为:A+MD5(A+PWD) 的方式,A为随机生成的GUID,这样在验证Token时,就可以直接通过算法来验证合法性,只有算法验证通过后,再进行下一步的操作。

        登陆后产生一个SSO的票据,这个票据是最重要的,因为它是决定用户是否登陆的关键。这个票据可以是Cookie,也可以是Session, 我比较倾向于Cookie,因为现在有3DES加密,加密后篡改Cookie几乎成为不可能,所以无论是对于服务器负担来说还是安全性都是Cookie比 较好,可能人认为万一不支持Cookie呢,不过我想Demo应该没问题吧,大不了我设计成两个都支持。

        PS,为什么不用非对称加密?其实那个效率不高,3DES的安全性已经足够了,至少现在还没有人宣称能破解。

在登陆后就可以通知用户你已经登陆了,现在你可以去访问成员站点了,这个时候用户点击了成员站点的URL,进去了,这个时候首先就需要接受 PSO组件的盘查,你有没有PSO的票据呢?很显然是没有的,所以这个时候请求就被Redirect回了认证中心,认证中心检查用户已经有了SSO的票据 了,认为用户已经登录了,就把用户的SSO票据附加在URL后边然后Redirect回成员站点,成员站点的PSO这个时候获取到了SSO票据,于是知道 了用户已经在认证端登录了,于是就创建一个PSO票据,然后返回给用户他所请求的内容。所以我们来看看其实PSO的逻辑更加复杂一点。

我们可以看到其实两个模块的功能都不算复杂,这里存在几个现实的问题,第一个是加密问题,票据需要加密,传输的URL也需要加密。

        在SSO把票据通过URL发送给PSO的时候,如果我们能够截获这个URL,不管他加没有加密,在下一次我们直接用这个URL去访问站点的时 候因为已经包含SSO票据了,所以PSO会认为已经登陆了而直接产生PSO票据然后就让用户进去了,这显然是一个漏洞。所以呢,我们需要在这里给这个 URL加一点盐值(所谓盐值其实就是加点料),我们通过在URL里加入时间戳来让这个URL具备时间限制,这个样子URL具备失效期,过了这个时间即使截 获到了这个URL也完全没有作用了。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    .NET单点登陆的实现方法及思路

    .NET单点登录(Single Sign-On, SSO)是一种让用户在多个相关应用系统中只需要登录一次就能访问所有系统的机制。在.NET环境下实现SSO,主要涉及以下几个关键步骤和知识点: 1. **系统架构**:通常,SSO系统由一个...

    .net 单点登录的设计与实践

    《.NET 单点登录的设计与实践》 单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个应用系统中登录后,无需再次输入凭证即可访问其他相互信任的应用系统。在.NET环境中,实现SSO可以帮助...

    开发前台,后台秒杀活动设计思路

    开发前台、后台秒杀活动设计思路 概述:本文讨论了秒杀活动的设计思路,包括秒杀的特征、秒杀架构和设计思路。秒杀活动对稀缺或者特价的商品进行定时、定量售卖,吸引大量的消费者进行抢购,但又只有少部分消费者...

    前端模块化设计思路

    3. 每个网站作为一个模块:大型项目可能包含多个子站点,每个子站点可以视为一个独立的模块,方便管理和升级。 在HTML、CSS和图片的模块化设计中: 1. 对HTML进行模块化,可以通过类名来组织元素,例如使用`.mod`、...

    java公交站点查询系统

    以上是对“java公交站点查询系统”的主要技术点和设计思路的详细解析,涵盖了从数据库设计、Java编程到用户体验的多个层面。通过这个系统,用户可以便捷地获取公交信息,而开发者则展示了Java和ACCESS在实际项目中的...

    基于STM32F103T6的温度控制系统设计.pdf

    通过CAN总线,系统能够与其它节点进行数据交换和传输,这为在多个站点间进行通信提供了支持,极大地扩展了温度控制系统的应用范围。 ### 系统测试与可靠性 经过测试,该系统的技术指标满足要求,运行稳定可靠。这...

    一个简单二站查询公交程序

    而二次查询可能指的是用户可以连续查询两个站点之间的公交换乘方案,即从一个站点出发,经过一个或多个换乘点,到达另一个站点。 在描述中提到,这是一个“二站查询公交程序”,进一步证实了它的核心功能是处理两个...

    如何设计秒杀系统 秒杀系统架构优化思路

    ### 如何设计秒杀系统:秒杀系统架构优化思路 #### 一、为什么秒杀系统难做? 秒杀系统的难点在于其特殊的业务场景——在短时间内处理极大量的并发请求。例如小米手机每周二的秒杀活动,尽管备货可能只有1万台手机...

    应用PANDA软件进行高精度GPS数据处理.pdf

    在当今的测量领域,GPS技术已经成为不可或缺的工具,它的高精度和广泛的用途为测绘、建筑、城市规划等多个行业带来了革命性的变化。传统的GPS相对定位方法存在一些局限性,例如需要已知站点的数据作为参考,这限制了...

    BusScoll.rar

    下面,我们将深入探讨其中涉及到的主要技术点、设计思路以及实现方法。 首先,我们要明确公交站App的主要功能是展示各个公交站点,并且当站点数量过多,无法在单个屏幕上完全显示时,用户可以通过滑动来查看更多的...

    SDH微波技术交流方案设计、工程安装调试.pptx

    包括站点的建筑环境信息、设计依据和传输要求、设计思路、设备选型、工程规模、方案设计分析、设计技术指标、施工说明、工程材料清单和预算。这些步骤构成了一个完整的工程设计方案。 5. **设计图纸部分**: 重要...

    查询换乘公交车课程设计

    【查询换乘公交车课程设计】是一项典型的交通信息系统开发任务,主要使用C语言进行实现。这个项目的核心目标是...同时,项目实施过程中还会涉及问题分析、需求理解和设计思路,这些都是软件工程实践中不可或缺的技能。

    基于多智能体协商的公交分布式滞站控制策略.pdf

    分布式控制策略指的是控制策略不是由单一中心点控制,而是由多个控制点根据局部信息进行决策和协调,实现整体的控制目标。 在内容上,本文对公交车辆运行过程中的“串车”现象和常见控制策略进行了详细描述,指出了...

    分布式站群系统设计与实现.pdf

    5. **站点分布式部署**:系统允许网站在多个物理服务器上进行分布式部署,确保负载均衡,提高服务性能。当某个服务器出现问题时,其他服务器可以接管工作,保证服务连续性。 6. **集中管理**:通过统一的管理界面,...

    工程工业控制课程设计概述.docx

    总结监控软件的设计思路和实现过程中的关键技术点。 通过以上内容可以看出,机电一体化柔性装配系统涵盖了从基本的机械设计到先进的自动化控制技术,旨在为学生提供一个全面的学习和实践平台。通过学习这一课程,...

    晒晒你的系统架构.pdf

    具体地,负载均衡和数据库作为单点,单个服务器仅承载1-2个站点,导致资源浪费,并且在服务器故障时可能会有服务中断。针对这些问题,建议实现负载均衡和数据库的高可用性,以及整合服务器资源,例如将每个集群的...

    PHP面试大全-基础篇

    - **多站点登录**:指用户在一个站点登录后,可以无需再次登录即可访问其他相关联的站点。 **2.3 PHP SPL** - **SPL(Standard PHP Library)**:标准PHP库,提供了一系列内置的接口和类,如SplStack、SplQueue等,...

    公交车线路查询APP系统.zip

    开发一个公交车线路查询APP涉及到的技能和知识点众多,不仅需要前端和后端的编程能力,还需要对地图服务、数据库管理、用户界面设计等多个领域有所了解。通过学习和实践这样的项目,开发者可以全面提升自己的综合...

    公交车线路查询APP系统1.zip

    开发一个公交车线路查询APP涉及到的技能和知识点众多,不仅需要前端和后端的编程能力,还需要对地图服务、数据库管理、用户界面设计等多个领域有所了解。通过学习和实践这样的项目,开发者可以全面提升自己的综合...

    无懈可击的Web设计

    ### 无懈可击的Web设计:重构传统导航栏 #### 重要知识点: - **适应性设计**:创建能够...这种方法不仅解决了代码冗余和下载速度慢的问题,还提高了导航栏的适应性和可维护性,为Web设计提供了新的思路和方向。

Global site tag (gtag.js) - Google Analytics