什么是单点登录

  • 单点登录: SSO(Single Sign On) 用户只需登录一次,就可访问同一帐号平台下的多个应用系统。
  • 比如阿里巴巴这样的大集团,旗下有很多的服务系统,比如天猫,淘宝,1688等等,如果每个子系统都需要用户进行登录认证,估计用户会被烦死。
  • SSO 是一种统一认证和授权机制,去解决这种重复认证的逻辑,提高用户的体验。

单点登录原理图

单点登录的凭证

  • 由单点登录的原理,可以看出来,最重要的就是这个通用的登录凭证 ticket 如何获得
  • 而实现 ticket 多应用共享主要有三种方式:父域加密 Cookie、用户认证中心、Localstorage

父域 Cookie 方式

  • 用户在登录父应用后,服务端返回用户登录后的 cookie,客户端将该 cookie 保存到父域中
  • 这个 cookie 最好经过加密处理,因为 Cookie 本身并不安全
  • 这种加密算法只有服务端才可以知道,服务端的解密算法不能暴漏
  • 放在父域中,主要是因为 Cookie 不能跨域实现免登,放到父域中可以解决跨域的问题
  • 父域也就是 domain 要设置成主域名,而非二级域名,这样二级域名就可以使用同一个 Cookie
// 如果某个平台有三个应用,分别是:
// 门户应用:www.autofelix.com
// 商城应用:shop.autofelix.com
// 支付应用:pay.autofelix.com document.cookie = "ticket=xxxxxx;domain=.autofelix.com;path=/

用户认证中心方式

  • 使用一个认证中心,用来专门负责处理登录请求
  • 用户中心不处理业务逻辑,只是处理用户信息的管理以及授权给第三方应用
  • 第三方应用需要登录的时候,则把用户的登录请求转发给用户中心进行处理,用户处理完毕返回凭证,第三方应用验证凭证,通过后就登录用户。
  • 流程是用户访问应用系统,应用系统先检查用户是否有 Ticket,如果没有,则说明用户在该应用上尚未登录,跳转到用户中心,通过用户中心的 Cookie 去判断用户是否在其他应用上进行了登录
  • 如果认证中心发现用户尚未在其他任何应用上执行过登录,则提示用户执行登录操作,等待用户登录后,生成 Tickcet,并让 Ticket 拼接在 URL 上,重定向回应用系统
  • 当应用系统拿到 Ticket 后,将重新向用户认证中心发起验证,防止该 Ticket 是用户伪造,验证成功后,记录用户登录状态,并将 Ticket 写入到当前应用的 Cookie
  • 而当用户访问该应用系统时,就都会带上当前的 Ticket,也就能正常访问服务了

用户认证中心方式

localstorage方式

  • 当用户在一个应用下登录后,前端可以通过 iframe+postMessage() 方式,将同一份 Ticket 保存到多个域名下的 LocalStorage
  • 但是这种方式完全由前端控制,后端仅仅需要将用户登录成功后的 Ticket 返回给前端处理即可
  • 这样其实也实现了,多应用下单点登录的问题,并且支持跨域

localstorage方式

实战模拟│单点登录 SSO 的实现的更多相关文章

  1. Redis缓存实现单点登录SSO

    .NET基于Redis缓存实现单点登录SSO的解决方案 .NET基于Redis缓存实现单点登录SSO的解决方案   一.基本概念 最近公司的多个业务系统要统一整合使用同一个登录,这就是我们耳熟能详的单 ...

  2. 单点登录SSO:概述与示例

    目录 概述 演示一:零改造实施单点登录 演示二: 单点注销 演示三:集成AD认证 演示四:客户端单点登录 演示五:移动端单点登录 单点登录SSO概述 本系列将由浅入深的,带大家掌握最新单点登录SSO方 ...

  3. [转载]单点登录SSO:概述与示例

    原文地址: https://www.cnblogs.com/baibaomen/p/sso.html 目录 概述 演示一:零改造实施单点登录 演示二: 单点注销 演示三:集成AD认证 演示四:客户端单 ...

  4. 可跨域的单点登录(SSO)实现方案

    可跨域的单点登录(SSO)实现方案 SSO简介 定义: 传统的单站点登录访问授权机制是:登录成功后将用户信息保存在session中,sessionId保存在cookie中,每次访问需要登录访问的资源( ...

  5. cas单点登录 SSO 的实现原理

    原文出处: cutesource   欢迎分享原创到伯乐头条 单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户 ...

  6. 单点登录 SSO 的实现原理

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任. 单点登录在大型网站里使用 ...

  7. Atitit. 单点登录sso 的解决方案 总结

    Atitit.  单点登录sso 的解决方案 总结 1. 系统应用场景and SSO模式选型 2 2. 系统应用的原则与要求 2 2.1. 开发快速简单::绝大部分系统来说,开发快速简单为主 2 2. ...

  8. 十六、【适合中小企业的.Net轻量级开源框架】EnterpriseFrameWork框架核心类库之单点登录SSO

    回<[开源]EnterpriseFrameWork框架系列文章索引> EFW框架源代码下载:http://pan.baidu.com/s/1qWJjo3U 单点登录(Single Sign ...

  9. 单点登录SSO的实现原理

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...

随机推荐

  1. 『现学现忘』Git基础 — 12、Git用户签名(补充)

    目录 1.修改用户签名 2.取消用户签名 3.用户签名的优先级 4.总结本文用到的Git命令 1.修改用户签名 其实很简单,就是重新执行git config命令,换个用户名和邮箱地址就可以了,新配置的 ...

  2. input 标签的 pattern 属性

    定义和用法 pattern 属性规定用于验证输入字段的模式. 模式指的是正则表达式. 注释:pattern 属性适用于以下 <input>类型:text, search, url, tel ...

  3. 基于Koa与umi实现服务端(SSR)渲染

    工具: umijs:react前端应用框架. koa:基于 Node.js 平台的web 开发框架. 介绍: 本文主要是简单介绍,利用umi开发前端页面,打包成服务端渲染工程包.由Koa实现服务端渲染 ...

  4. 面试突击44:volatile 有什么用?

    volatile 是 Java 并发编程的重要组成部分,也是常见的面试题之一,它的主要作用有两个:保证内存的可见性和禁止指令重排序.下面我们具体来看这两个功能. 内存可见性 说到内存可见性问题就不得不 ...

  5. C#中的接口和类有什么异同

    不同点: 1. 不能直接实例化接口 2. 接口中的成员不能用访问修饰符修饰(默认public) 3. 接口不包含方法的实现 4. 接口可以多继承,类只能单继承. 5. 类定义可在不同的源文件之间进行拆 ...

  6. hooks 与 animejs

    hooks 与 animejs 本文写于 2020 年 1 月 13 日 animejs 是现如今非常不错的一个 js 动画库.我们将其与 React Hooks 融合,使它更方便的在 React 中 ...

  7. 接口测试使用Python装饰器

    写接口case时,有时需要对cae做一些共性的操作,最典型的场景如:获取case执行时间.打印log等. 有没有一种办法来集中处理共性操作从而避免在每个case中都写相同的代码(如:每个case都需要 ...

  8. 国内访问 git 慢的方法

    在国内访问 git 的时候,总会存在访问慢或者git clone 的时候报下面的错误 这个时候,我们可以使用代理的方式去进行访问 需要注意的是:你必须存在一个国外的,能够让你快速访问到 GitHub ...

  9. linxu篇-centos搭建ftp服务器

    1安装vsftpd 2备份配置文件 3修改配置文件 vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO #允许匿名用户访问为了安全选择关闭 local_ena ...

  10. 个人冲刺(五)——体温上报app(二阶段)

    冲刺任务:完成用户登录和随机验证码功能 loginActivity.java package com.example.helloworld; /** * 纯粹实现登录注册功能,其它功能都被注释掉了 * ...