写在前面

这是奇点云全新技术专栏「StartDT Tech Lab」的第6期。

在这里,我们聚焦数据技术,分享方法论与实战。一线的项目经历,丰富的实践经验,真实的总结体会…滑到文末,可以看到我们的往期内容。

本篇由奇点云数据平台后端架构师「褚岩」带来:

作者:褚岩

阅读时间:约7分钟

#1 什么是单点登录(SSO)

单点登录(Single Sign On,简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权,无需再次登录。

这种技术目前得到了广泛使用,它核心解决了一个问题:用户只需要登录一次,就可以访问所有相互信任的应用系统。

#2 单点登录的原理及实现方案

单点登录的实现方案一般包含:Cookies、Session同步、分布式Session方式、统一认证授权方式等。目前的大型网站通常采用分布式Session及第三方认证授权的方式。

2.1

基于Cookie的单点登录

基于Cookie的单点登录是最简单的单点登录实现方式,它使用Cookie作为媒介,存放用户凭证。

用户登录父应用之后,应用返回一个加密的Cookie,用户访问子应用的时候,携带上这个Cookie,授权应用解密Cookie并进行校验,校验通过则登录当前用户。

这种方式虽然实现简单,但Cookie不够安全,容易泄漏,且不能跨域实现免登。

2.2

分布式Session实现单点登录

分布式Session实现单点登录原理是将用户认证信息保存于Session中,即以Session内存储的值为用户凭证,一般采用Cache中间件实现(如Redis)。用户再次登录时,应用服务端获取分布式Session来校验用户信息。如图所示:

图源:CSDN(作者:路远)

一般情况下都是基于Redis实现Session共享,将Session存储于Redis上,然后将整个系统的全局Cookie Domain设置于顶级域名上,这样SessionID就能在各个子系统间共享。

这种方式也有一个问题,共享Session无法处理跨顶级域名。

2.3

统一认证授权方式实现单点登录

图源:褚岩

由图可知,通过统一认证授权方式实现单点登录,需要有一个独立的认证系统。

用户第一次访问应用系统时,由于还未登录,被引导到认证系统中进行登录,认证系统接受用户名密码等安全信息,生成访问令牌(ticket)。用户通过ticket访问应用系统,应用系统接受到请求之后会访问认证系统检查ticket的合法性,如果检查通过,用户就可以在不用再次登录的情况下访问应用系统资源。

以上介绍了单点登录常见的3种实现方案,在实际应用中还需要根据具体场景来实现。

接下来通过几个实际生产场景,来阐述单点登录的详细实现方案。

#3 使用JWT实现单点登录

(完全跨域方案)

JWT (JSON Web Token)是一个开放标准(RFC7519),它是一个含签名并携带用户相关信息的加密串。页面请求校验登录接口时,请求头中携带JWT串到后端服务,后端通过签名加密串匹配校验,保证信息未被篡改,校验通过则认为是可靠的请求,将正常返回数据。

DataSimba(奇点云数据中台产品)结合JWT与分布式session,实现多域多空间单点登录。通过JWT生成和校验令牌,将刷新令牌存储在redis中,网关统一校验令牌,校验通过后将用户信息设置在请求头中,应用在拦截器中获取到用户信息后即可验证通过。

不同域中的DataSimba共用一套密钥并且实时同步用户信息,通过JWT生成和校验令牌,用户登录其中一个域后,前端获取JWT加密串并存储在Local Storage中,当用户切换到其他域时前端传入加密串,后端网关校验,由此实现免登录访问其他域资源,如下图所示:

DataSimba单点登录时序图

#4 使用OAuth2.0实现单点登录

OAuth 2.0 是一种认证授权机制,主要用来颁发令牌(token),OAuth的核心就是向第三方应用颁发令牌,OAuth2.0就是对应上文2.3(统一认证授权方式实现单点登录)中的认证系统。

OAuth在“客户端”与“服务端”之间,设置了一个授权层(Authorization Layer), “客户端”通过登录授权层获取令牌,通过令牌即可访问服务端资源。

OAuth2.0单点登录流程同上文介绍的“统一认证授权方式”流程一致:用户首次访问服务端资源时未登录,被引导到认证系统中进行登录授权,登录成功后获取令牌,用户获取令牌后可以通过令牌获取用户信息。客户端必须获取到用户授权,才能获取令牌。

OAuth2.0定义了4种授权方式:

  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 密码模式(resource owner password credentials)
  • 客户端模式(client credentials)

DataSimba通过简化模式获取令牌,使用OAuth2.0实现单点登录时序图如下:

图源:褚岩

通过OAuth2.0认证实现单点登录,为开发人员提供了一个通用的身份验证框架,提高开发人员的效率,解决了跨顶级域名单点登录问题。

#5 集成LDAP实现统一认证登录

LDAP(Lightweight Directory Access Protocol),它是基于X.500标准的轻量级目录访问协议。LDAP目录服务是由目录数据库和一套访问协议组成的系统。

日常办公经常会有多套系统,如果各个系统各自维护一套用户认证,用户需要记住多个用户名密码。系统各自管理用户认证的方式,不但会有重复建设的问题,用户体验也会差——经常会有用户忘记密码的情况。通过LDAP,我们可以管理企业级账号,认证用户名密码,实现统一账号登录,只需一个用户名密码就可以登录所有系统。

LDAP作为统一登录认证架构图如下:

图源:褚岩

LDAP主要是用来实现统一身份认证的技术,目前市面上大部分的开源系统都支持LDAP,因此通过LDAP能够统一管理和维护公司的账号,极大地提高了运维的工作效率。


在实际应用中,奇点云的数据中台产品DataSimba也通过单点登录实现了多域多空间的访问。用户登录DataSimba某一个域后,无需再次登录,即可方便地切换到其他域。

以一个国内大型饮料集团客户为例,DataSimba使用JWT+Session共享方式实现跨域单点登录,通过OAuth2.0对接其统一认证平台,实现统一账号单点登录。

实现单点登录的技术方案很多,但没有哪种方案可以完美解决所有问题。我们需要针对具体应用场景来制定最优解决方案。

浅谈单点登录SSO实现方案 | StartDT Tech Lab 06相关推荐

  1. 前后端分离单点登录SSO实现方案 淘宝、京东跨域获取Cookie、OAuth2、QQ客户端多种模式

    演示Demo站点 http://sso.exrick.cn 开源版Github地址 https://github.com/Exrick/x-boot) 开发文档 https://www.kanclou ...

  2. 基于.Net的单点登录(SSO)解决方案

    基于.Net的单点登录(SSO)解决方案 前些天一位朋友要我帮忙做一单点登录,其实这个概念早已耳熟能详,但实际应用很少,难得最近轻闲,于是决定通过本文来详细描述一个SSO解决方案,希望对大家有所帮助. ...

  3. 单点登录SSO:图示和讲解

    目录 概述 示例运行效果动画 跨域Web SSO时序图 代码截图 几个基本概念 涉及的站点和页面 重点理解:单点登录的核心步骤 敢说最准确的单点登录图示,因为: 我严格对照所画时序图的每个步骤,开发了 ...

  4. 企业门户应用整合中单点登录(SSO)的技术实现与应用

    企业门户应用整合中单点登录(SSO)的技术实现与应用 相关专题: 电子应用 时间:2009-07-27 09:56来源: icbuy亿芯网 1 引 言 企业在信息化建设过程中,由于经常采用逐步信息化的 ...

  5. trs ids身份服务器系统实现统一身份认证与单点登录平台技术,统一身份认证和单点登录系统建设方案.pdf...

    福建省公安公众服务平台 统一身份认证及单点登录系统建设方案 福建公安公众服务平台建设是我省公安机关 "三大战役"社会管 理创新的重点项目之一: 目前平台目前已经涵盖了公安厅公安门户 ...

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

    背景 SSO,英文全称Single Sign On,单点登录,一般应用于多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的保护资源.如登录访问 blog.baidu.com 后,对于 ...

  7. 什么是单点登录(SSO)?单点登录(SSO)到底什么意思?【附逻辑Demo实例】

    在程序开发中,特别是网站类开发,会接触到单点登录(SSO),什么是单点登录?,单点登录(SSO)有什么用?下面软币网小编来来介绍一下: 一.什么是单点登录? 单点登录的英文名叫做:Single Sig ...

  8. 单点登录(SSO)详解

    文章目录 前言 一.单点登录是什么? 二.单点登录的实现方式 1.Cookie方案: 2.Session方案: 3.Token方案: 三.JWT是什么 1.JWT的概况 2.JWT的组成 3.JWT的 ...

  9. PHP多台服务实现单点登录,如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO)...

    如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO) Apache Session复制: 使用Memcached来共享PHP Session: 使用Cohere ...

最新文章

  1. 移动端与PHP服务端接口通信流程设计(基础版)
  2. 双绞线网线的连接方式
  3. Windows7 VMware虚拟机安装Apple Mac OSX v10.7 Lion
  4. 奶源向左配方向右,飞鹤、澳优、贝因美们要如何重振国产奶粉?
  5. window和 linux 在一起 ios和 android在一起 net和js在一起
  6. python: 判断字符串是否为合法的json格式
  7. java面试题27 java中下面哪些是Object类的方法()
  8. Codeforces Round #500 (Div. 2) C.Photo of The Sky
  9. 清空本地_PyQt5播放实时视频流或本地视频文件
  10. 使用maven给spring项目打可直接运行的jar包(配置文件内置外置的打法)
  11. $(...).modal is not a function
  12. 1.运动学分析-正运动学
  13. Python实现k均值聚类算法_K-Means聚类算法
  14. MySQL官方提供的日志分析工具_MySQL 日志分析的几款工具-Fun言
  15. Android Studio+SDK+tools下载、安装、配置及应用程序运行(详细,亲测)
  16. 数据传输速率与带宽之间的关系
  17. Java基础常见英语词汇
  18. 持有境外机动车驾驶证,是否可以在我国驾驶机动车?
  19. 木棍上的蚂蚁jolj2466 模拟法
  20. 5G NR帧结构与物理资源

热门文章

  1. IOS第二十九天——HTTP下载一个图片
  2. 结合泛函极值_泛函的极值
  3. 中秋节三天折腾出来的东西
  4. 盛会落幕,精彩延续 | 云扩科技入选《2022中国AI商业落地市场研究报告》
  5. 接入层交换机信息流量方向定义
  6. Android中对menu、home、back键的监听
  7. 语音信号处理-第三方库:librosa、nnAudio、torchAudio三者的差异
  8. ABAP 内表修改 MODIFY 和 MODIFY table 的区别
  9. android分析手机唤醒源
  10. 配置与管理Web服务器