本文主要基于web类应用展开讨论,提供的是一种通用机制和方法,所以不论何种技术栈都可进行相应的具体实现。

实现目标

可以在相同或跨域环境下完成各应用的统一登录/注销

方案原理

本质上是采用了web应用的会话技术和机制,所以才使得此方案的可操作性和通用性乃至规范性上有了天然的优势。会话追踪主要有Session、Cookie两种实现,背后的原理和机制大家也都非常熟悉。抛开它们的些许差异不谈,共通的思想都是在身份得到认证通过后,保持一个特定的可溯身份标识(Session ID / Cookie字符串),当然了他们都是以HTTP的Cookie部分保存的。又可知,当浏览器禁用了Cookie,为了让Session继续工作,就需要把Session Id附带到url部分来传递。说到这,就引出了我们想要表达的重点,即在应用服务器和统一认证服务器间传递认证信息的字符串标识(姑且称之Token),Token和Session ID我们完全可当作一个同源的东西来看待,也就是说没有额外需求场景下又恰好使用的Session,完全可以拿Session ID直接来用。之所以引出Token,主要是为了将使用Cookie作为用户认证手段的应用统一起来。

系统组件

  • 统一认证服务器(http://sso.com) - 此服务保存关于用户的公共信息,各应用均请求该服务进行登录/注销和身份有效性验证。
  • 应用服务器(a.com, http://b.com) - 此类服务保存用户的具体业务信息和相应的角色权限, 参与到SSO应用群中的各个独立应用站点。

处理流程

  • 登录
  1. 用户访问a/http://b.com,本地域检查未登录,跳转至步骤2(本地域自由选择使用Session / Cookie来记录用户登录认证标识)
  2. http://sso.com域检查本地用户登录认证信息,用户是否已登录,如未登录先进行登录,登录成功后记录本地用户登录认证标识(Session或Cookie),并生成保存一个唯一的Token来标识用户,然后在URL中携带以上Token跳转至来源应用域(形式如:a/b.com?token=xxxxxx)
  3. a/http://b.com域如接收到URL中的token串后,请求http://sso.com提供的验证接口检查token的真实有效性,如有效则同时返回用户的关键身份信息(如用户ID、用户名、头像URL、...)同时保存本地的用户登录认证标识。
  • 注销
  1. 注销其实可以分成两类场景: (1a)用户从应用a/http://b.com本地退出,本地域检查已经登录,对本地认证登录认证标识做销毁过期处理,并将URL跳转至http://sso.com的注销地址(如:http://sso.com/logout)。(1b)用户从应用a/http://b.com的外部域退出,对于此种情形的应对,需要在各应用登录后执行一段定时(时长可按实际情况酌情考虑,如希望准实时就将间隔尽量小,灵活掌握)轮询的jsonp脚本携带登录时的Token信息,去请求http://sso.com检测是否已退出(如:http://sso.com/checkExist?token=xxxxxx),如检测到为已退出状态,对本地认证登录认证标识做销毁过期处理,但不用再额外通知http://sso.com了。
  2. http://sso.com本地域退出或接收到来自外部应用的logout的请求后,将本地域相应Token标识用户的登录认证标识做销毁过期处理。

以上即是一套完整的且具通用性的sso解决方案,实现简单而对新搭建或旧有系统的改造几乎无侵入性,只需增加登录和注销时所需的处理逻辑。

补充一点额外的话,有没有觉得这个方案如果往再更大范围去想,是完全可以当作一套更具开放性的三方登录(如:Open ID / Oauth)平台服务,各平台也无需注册,权当成一个需要接入sso应用方对接就可完成。

SSO-单点统一登录系统的设计与实现的更多相关文章

  1. SSO单点登录的研究

    一.单点登录的概述       单点登录(Single Sign On),简称为 SSO,SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 用以解决同一公司不同子产 ...

  2. 多平台的网站实现单点登录系统(SSO)的开发思路 让你的会员中心更加统一(参考资料)

    单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码 ...

  3. 单点登录系统(SSO)的开发思路

    单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码 ...

  4. 单点登录系统(SSO)详细设计说明书(上篇)

    1.引言 1.1编写目的 为了单点登录系统(SSO系统)的可行性,完整性,并能按照预期的设想实现该系统,特编写需求说明书.         同时,说明书也发挥与策划和设计人员更好地沟通的作用. 1.2 ...

  5. 多系统实现单点登录方案:SSO 单点登录

    一.什么是单点登录SSO(Single Sign-On) SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用 ...

  6. 系统的讲解 - SSO单点登录

    目录 概念 好处 技术实现 小结 扩展 概念 SSO 英文全称 Single Sign On,单点登录. 在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统. 比如:淘宝网(www.t ...

  7. 单点登录系统---SSO

    1.------------------SSO介绍--------------------------------- 有什么卵用?搞什么飞机的? 大家看看这个图,一个系统是没有问题.如果是分布式的系统 ...

  8. Atitit.单向sso  单点登录的设计与实现

    Atitit.单向sso  单点登录的设计与实现 1. 单点登录sso 的三大解决方案1 2. 新方案:密码管理器方案1 3. 调用方1 4. 自动登录登录2 5. 主页跳转2 1. 单点登录sso  ...

  9. 【SSO】单点登录系统

    一.单点登录系统介绍 对于一个开发项目来说,每个项目都必不可少要有登录的这个功能.但是随着项目的变大,变大,再变大.系统可能会被拆分成多个小系统,咱们就拿支付宝和淘宝来说,咱们在淘宝上购物,然后就可以 ...

随机推荐

  1. 借鉴别人的Oracle 11g安装和卸载图文教程

    Oracle 11g安装 1.解压下载的包,然后进入包内,点击setup.exe开始安装 . 2.出现如下:一般把那个小对勾取消,点击下一步进行, 弹出下图这个后点‘是' 3.下图后,选择创建和配置数 ...

  2. 2018C程序设计—第0次作业

    1.翻阅邹欣老师博客关于师生关系博客,并回答下列问题,每个问题的答案不少于500字 1)最理想的师生关系是健身教练和学员的关系,在这种师生关系中你期望获得来自老师的哪些帮助? 答:正如邹欣老师博客里所 ...

  3. 关于collectionView和tableView的两种cell的出列方法的区别

    相信好多人一定会对collectionView和tableView的两种cell出列方法有所疑问,下面以UICollection为例子进行举例说明 假设我们已经创建了一个collectionView, ...

  4. vue的简单tab

    <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...

  5. JAVA_SE基础——16.方法

    接触过C语言的同学,这小章节很容易接受.Java中的方法是类似与C语言中的函数  功能和调用方法都类似  只不过叫法不一样  因为java是面向对象  c是面向过程    仅仅是叫法不同.. . 看到 ...

  6. TF中conv2d和kernel_initializer方法

    conv2d中的padding 在使用TF搭建CNN的过程中,卷积的操作如下 convolution = tf.nn.conv2d(X, filters, strides=[1,2,2,1], pad ...

  7. kubernetes进阶(04)kubernetes的service

    一.service概念 Service是对一组提供相同功能的Pods的抽象,并为它们提供一个统一的入口.借助Service,应用可以方便的实现服务发现与负载均衡,并实现应用的零宕机升级.Service ...

  8. apigw鉴权分析(1-1)阿里数加 - 鉴权方式分析

    一.访问方式 1.访问阿里云首页 https://www.aliyun.com/?utm_medium=text&utm_source=bdbrand&utm_campaign=bdb ...

  9. python 爬取百度翻译进行中英互译

    感谢RoyFans 他的博客地址http://www.cnblogs.com/royfans/p/7417914.html import requests def py(): url = 'http: ...

  10. Spark-1.X编译构建及配置安装

    前提条件(环境要求) jdk版本:1.7+ scala版本:1.10.4+ maven版本:3.3.3+ 本博客中使用的软件版本 spark版本:spark-1.6.1.tar.gz(源码) jdk版 ...