什么是SSO?

如果你已知道,请略过本节!

SSO核心意义就一句话:一处登录,处处登录;一处注销,处处注销。即:在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

很多人容易把SSO与OAuth搞混。这里简单说明一下:

OAuth也可简单总结为一句:基于各种懒和YY的原因,拿别人的登录系统来用。

至于官方说的,是一种授权协议,为网站用户授权第三方应用访问自己在网站…(此处省略N多字)可自行百度。

SSO实现

SSO的实现方式虽然有很多种,但大的框架不会脱离下图结构的:

即所有的登录验证,登录状态存储都在SSO授权中心处理(图中的www.sso.com),其他站点或者使用浏览器跳转(Response.Redirect)或者使用服务器端http post来与SSO授权中心进行通信验证。下面是百度里比较知名的几种实现方式,我会介绍一下他们的优缺点,并提出自己最终的解决方案!

实现方式一:强大的Cookie + Response.Redirect

从感情上来说,这是我最喜欢的一种方式,如果不是我后面提到的几个致命的缺点,我想我这辈子都只会用它了。CodeProject上ASP.NET版块2010 年9月份最佳文章:Single Sign On (SSO) for cross-domain ASP.NET applications 对这种方式给出了完美的说明,并给出了一个可运行的实例!有兴趣的同学可以读一下原文,非常有意思。我这里说一下它的核心思想!

先看看登录:

再看看,如果我想访问一个XX列表页面,流程是这样的:

这种方式看似流程复杂,实际代码实现起来非常简单。domain1.com/domain2.com等站点不用做任何cookie,session等操作,只需要在后台把认证相关的操作全部Redirect给sso.com,然后等着SSO处理完结果Redirect回来即可。具体代码实现可以参考这位大神的第二篇文章:Single Sign On (SSO) for cross-domain ASP.NET applications: Part-II - The implementation

这种方式原理和代码很简单,但缺点也是非常明显的:

  1. 不支持ajax登录验证方式,因为ajax处理后台Redirect相当复杂,这是该方式的致命缺点;
  2. 这能在相同的浏览器里实现单点登录,因为客户端网站没带任何状态信息,只能借用sso.com的cookie判断,不过这个缺点可以用URL带参数,用缓存代替cookie等解决;

实现方式二:HttpClient后台提交

这种方式的典型实现,是以前园子里一个哥们写的smartSSO:http://www.cnblogs.com/smartbooks/p/3800849.html

同上,他的实现核心也可以简化为两幅图。

登录时的情况:

访问一个XX列表页面的情况:

这种实现完全把与sso.com的交互放在了domain1.com/domain2.com后台,通过httpclient post的方式。对于前端普通用户,完全感觉不到sso.com的存在。

从流程图上看,你可能觉得实现起来比第一种方式要简单,但实际情况恰恰相反。因为你不但要在sso.com上做状态存储,还要在domain1.com等客户站点做状态判断并跳转。

该smartSSO只做了类似三方登录的功能,并没有提供客户站点直接登录的接口。

OpenAuth.Net的实现方式

OpenAuth.Net(项目简介及地址:http://www.cnblogs.com/yubaolee/p/OpenAuth.html )v1.2版综合了以上两种方式的优点,实现了更为优雅实用的SSO功能。

特点:

  1. 当使用普通跳转时使用Redirect快速验证;
  2. 当又Ajax时使用后台Post方式;
  3. 如果客户站点不想做登录,SSO占站点自带登录界面,可以完全把登录授权等逻辑交给SSO处理;
  4. 真正的一处登录,处处登录,一处注销,处处注销;

项目地址:https://git.oschina.net/yubaolee/OpenAuth.Net

快速体验地址: http://115.28.10.123:1312

细说SSO单点登录的更多相关文章

  1. 细说SSO单点登录(转)

    什么是SSO? 如果你已知道,请略过本节! SSO核心意义就一句话:一处登录,处处登录:一处注销,处处注销.即:在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 很多人容易把SS ...

  2. 简单使用redis实现sso单点登录

    前面几篇分享了nosql只mongodb,今天简单分享另一个nosql神兵redis. 主要模仿sso单点登录,将登录人信息写入redis.话不多说,直接上马,驾. /// <summary&g ...

  3. 使用 JSONP 实现简单的 SSO 单点登录

    SSO 即 Single Sign On(单点登录).  一.二级域名之间的单点登录 不需要用到JSONP 或者 p3p 协议,直接使用 COOKIE 就行了,因为顶级域名相同就能实现 COOKIE ...

  4. CAS实现SSO单点登录原理

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...

  5. [sso] 单点登录认证流程

    一.流程说明 第一步:访问cas过滤链接ssoLogin,拼凑定向到 CAS_SERVER 获取ticket的URL 第二步:CAS_SERVER校验用户信息,生成Ticket 第三步:重新定向到访问 ...

  6. php sso单点登录原理阐述

    原理:就是用户登录了单点登录系统(sso)之后,就可以免登录形式进入相关系统: 实现: 点击登录跳转到SSO登录页面并带上当前应用的callback地址 登录成功后生成COOKIE并将COOKIE传给 ...

  7. SSO单点登录之跨域问题

    第一次写博客,与大家共勉. 这里用到的原理其实非常简单,将cookie存在一个公共的站点的页面上就可以了,这里我们管那个站点叫主站S. 先说说所谓的跨域 环境1:a.xxx.com需要跟b.xxx.c ...

  8. cas sso单点登录系列4_cas-server登录页面自定义修改过程(jsp页面修改)

    转:http://blog.csdn.net/ae6623/article/details/8861065 SSO单点登录系列4:cas-server登录页面自定义修改过程,全新DIY. 目标:    ...

  9. 学习CAS实现SSO单点登录

    学习CAS实现SSO单点登录 网上找了几篇比较详细的教程,在这记录一下: 原理: CAS实现SSO单点登录原理 教程: 1.CAS实现单点登录(SSO)经典完整教程 2.SSO之CAS单点登录实例演示 ...

随机推荐

  1. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  2. node服务的监控预警系统架构

    需求背景 目前node端的服务逐渐成熟,在不少公司内部也开始承担业务处理或者视图渲染工作.不同于个人开发的简单服务器,企业级的node服务要求更为苛刻: 高稳定性.高可靠性.鲁棒性以及直观的监控和报警 ...

  3. MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信

    MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...

  4. AutoMapper

    什么是AutoMapper? AutoMapper是一个对象和对象间的映射器.对象与对象的映射是通过转变一种类型的输入对象为一种不同类型的输出对象工作的.让AutoMapper有意思的地方在于它提供了 ...

  5. 细说WebSocket - Node篇

    在上一篇提高到了 web 通信的各种方式,包括 轮询.长连接 以及各种 HTML5 中提到的手段.本文将详细描述 WebSocket协议 在 web通讯 中的实现. 一.WebSocket 协议 1. ...

  6. ABP文档 - 嵌入的资源文件

    文档目录 本节内容: 简介 创建嵌入的文件 暴露嵌入的文件 使用嵌入的文件 简介 一个web应用里,客户端包含javascript,css,xml等文件,这此文件被添加到一个web项目后,发布成独立的 ...

  7. 从备考PMP到与项目经理同呼吸

    前言 PMP是什么梗? 项目管理专业人士资格认证.它是由美国项目管理协会(Project Management Institute(PMI)发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证 ...

  8. 从零开始编写自己的C#框架(24)——测试

    导航 1.前言 2.不堪回首的开发往事 3.测试推动开发的成长——将Bug消灭在自测中 4.关于软件测试 5.制定测试计划 6.编写测试用例 7.执行测试用例 8.发现并提交Bug 9.开发人员修复B ...

  9. 设置line-height:1.5和line-height:150%或者line-height:150px的区别

    直接正题: 看一下line-height可能的值: 其实可以分为两类: (1)不带单位的(如line-height:1.5),这种是推荐使用的: (2)带单位的(如line-heigth:30px/1 ...

  10. 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定

    一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...