SSO (Single Sign On, 单点登录)

创建时间:
2014-10-29 00:09
最近更新:
2018-06-02 15:21

What

SSO (Single Sign On, 单点登录) 指 在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录。
SSO 包括 单点登录 与 单点注销 两部分。

Keywords

  • 跨域 单点登录

SSO单点登录_流程图_Tony版.eddx

存储在 B250 中。

百宝门 单点登录&统一身份管理 专业顾问与实施 Tony Praise

  1. 百宝门 单点登录 之一: 概述与示例 - 该系列入口
  2. 百宝门 单点登录 之二: 图示和讲解 - 时序图。该图已备份至 B250:百乐门SSO博文_配套时序图.png。
  3. 百宝门 单点登录 之三: 完整的代码 - 本文中提供了两个源码下载链接,一个是 百宝门官网 下载链接,另一个是 百宝门 GitHub 下载链接。2018-05-28 测试发现两个下载的区别仅 CR回车 LF换行 不同,前者是 Windows/Dos 风格 (CRLF / \r\n),后者是 Linux/Unix 风格 (LF / \n)。该源码已备份至 B250:百乐门SSO博文_配套源码。
  4. http://github.com/baibaomen/BaibaomenSsoLesson - 源码
  5. SSO 必须使用 HTTPS,不能使用 HTTP

方案

http 协议是无状态的。要让服务器知道是谁发来的请求只有两种方案: 方案一 用 cookie 传递 身份信息、方案二 用 HTTP 头 或 URL 或 表单数据 传递 身份信息。方案二 有局限性,必须从 特定的网页入口 进入,因为只有特定的入口 才有机会拼装出相应的信息 提交到服务端。大部分 SSO 需求都希望不依赖 特定的网页入口 (集成门户除外),因此只能选择方案一。

注销 / 退出登录

Q: 认证中心 是否需要 预先知道 所有的子站,从而 当一个子站请求注销时 就 注销所有子站?
A: 不用,单点登录 过程中有一步 是 子站向认证中心注册,注销时 认证中心 向 所有已注册的子站 发送带有 logout 参数的注销请求 即可,而不是用跳转来实现的。

开源解决方案

在 .NET 平台上有一个单点登录认证中心的开源实现: https://IdentityServer.io/

CAS (Central Authentication Service, 中央认证服务)

CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方案。CAS 在 2004年12月 正式成为 JA-SIG 的一个项目。官网地址 http://www.jasig.org/cas

  1. http://github.com/Jasig/cas/
  2. CAS
  3. ZCS 与 CAS 单点登录系统的集成
  4. CAS 实现单点登录 SSO 执行原理探究
  5. CAS 单点登录
  6. CAS 实现单点登录 .NET MVC
  7. ASP.NET MVC4 使用 CAS 单点登录
  8. ASP.NET 项目与开源单点登录项目 CAS 的结合

Resource

  1. 基于 .NET 的单点登录解决方案
  2. 单点登录的三种实现方式
  3. 单点登录原理与简单实现 - 关键就在这个令牌,用户输入用户名与密码在认证中心登录成功后,使用 userId + subSystemId + timeMillis + randomString 作为原始令牌,再用 RSA 加密,得到发放给子系统的令牌,任何人拿到这个令牌都是解不开的,子系统使用这个令牌,首先要去认证中心校验,校验就是让认证中心解密这个令牌,然后将解密后的内容 (包括 userId,当然你可以使用 username) 返回给子系统,子系统就知道当前登录的用户 id 或者 name 了。
  4. 单点登录原理与简单实现
  5. 单点登录 四种解决方案 - 泛泛之谈