本文主要基于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. [poj-2985]The k-th Largest Group_Treap+并查集

    The k-th Largest Group poj-2985 题目大意:给你n只猫,有两种操作:1.将两只猫所在的小组合并.2.查询小组数第k大的小组的猫数. 注释:1<=n,m<=20 ...

  2. php项目中常用的log日志记录方法

    function log_result($str) { if (LOG_WRITEOUT == 1) { $fp = fopen ( "log.txt", "a+&quo ...

  3. 20155214&20155216 实验二:固件程序设计

    ---恢复内容开始--- 20155214&20155216 实验二:固件程序设计 实验内容及要求 实验二 固件程序设计-1-MDK 实验要求: 1.注意不经老师允许不准烧写自己修改的代码 2 ...

  4. 高校学生征信系统Postmortem结果

    Postmortem结果 设想和目标 1 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件需要解决的问题是当前高校学生征信系统建设薄弱的问题,我们试图建立 ...

  5. Django 个性化管理员站点

    from django.contrib import admin # Register your models here. from .models import Moment class Momen ...

  6. 《高级软件测试》11.15.全组完成jira安装,开始任务的部分书写

    今日任务完成情况如下: 小段:完成linux环境上jira的安装,并将jira的安装过程录制下来 小费:完成linux环境下jira的安装,开始部分任务的书写 小高:完成了jira的安装,并进一步熟悉 ...

  7. 从数据恢复角度解析RAID6结构原理

    [什么是RAID]    RAID的概念描述在互联网上比比皆是,用最简单的原理描述,就是在定义存储方式时允许在一部分数据缺失的情况下不影响全部数据,类似于通讯领域的纠错码.不同的冗余模式形成了不同的R ...

  8. linux系统命令学习系列-用户组管理

    先复习一下上节内容: 设置密码命令passwd 用户信息修改命令usermod 用户删除命令userdel 作业:修改user1的用户id为505,家目录到admin,用户组为admin,最后删除us ...

  9. dede使用心得

    Question one: 最近做了一些视频教程传到优酷网站上,但我想引入这些视频教程到我的网站,在发表时我发现织梦CMS自带的编辑器又不直接支持优酷等视频网站的引用.所以为了方便教程的发布,特意在网 ...

  10. linux下面的打包压缩命令

    tar命令 tar [-cxtzjvfpPN] 文件与目录 ....linux下面压缩之前要把一堆文件打个包再压缩,即使只有一个文件也需要打个包.例子:tar czvf 1.tar.gz hello. ...