目录

SSO 和 LDAP

目录

0X00 前言

上周在新公司接到的一个任务"给 XXX 系统集成 LDAP 登录"。我以前是没有了解过 LDAP 的,一听是集成登录功能,脑子里第一时间想到的就是之前做过的 SSO,但是经过一番搜索发现 LDAP 和 SSO 完全是两回事,而且发现还是不少人不了解其中的一项或两项技术,正好在这儿整理一下顺便分享给大家~

内容都是比较基础的,主要介绍了什么是 SSO、SSO 的基本原理、什么是 LDAP、LDAP 的基本原理和 LDAP 如何与 SSO 关联。如果你对这些有兴趣那不妨继续看下去,如果你都了解了那就去看看其他文章或者休息一会儿好了~

现在开始做一些技术背景预设:假设你公司有 10 个站点,分别是site_0.just666.com/site_1.just666.com.....,同时每个站点都有用户系统,也就是说用户可以登录到站点上去做些操作。

用户肯定不愿意访问每个站点的时候都要登录,比如你登陆淘宝之后再看天猫肯定不想再登陆一次了,如果天猫要你再登陆一次且密码还跟淘宝那边不通你肯定要骂人了。现在怎么办呢?SSO 和 LDAP 两种技术就是用来解决这个问题的。

0X01 SSO

SSO全称是 Single Sign On,中文叫"单点登录",听名字也猜得出来,就是从单一节点上登录。SSO 需要在传统的"客户/服务"之外再加了一个 SSO 服务,专门用来校验用户登录和管理 token。

  1. 客户点开站点
  2. 站点发现这次请求没有携带有效 token,将客户跳转到 SSO 的登录页面(并告诉 SSO 本次跳转的来源)
  3. 客户在登录页面输入用户名密码,点击登录(此时在和 SSO 服务进行交互)
  4. SSO 服务器对登录信息进行校验,通过后发放一个 token 并跳转回源页面(因为第 2 步告诉 SSO 跳转的来源了)
  5. 客户带着 token 再次访问目标页面,服务器拿到 token
  6. 服务器带着 token 去 SSO 那儿校验,SSO服务 反馈:“这个 token 合法,用户是 shawn”
  7. 服务器通过校验,当前用户以 shawn 的身份登入到站点中了

这样一来,原本 10 个站点需要配备 10 个用户登录模块的,现在只需要独立出来的一个登录模块了;后面再有新的站点,接入到 SSO 也是非常方便的;不仅如此,SSO 也可以做到让你登录一个站点后带着 token 直接访问同域的其他站点。

所以简单点来说的话,“SSO 是一种用来验证登录的服务”。

0X02 LDAP

上面 SSO 介绍完了看起来好像验证就完美了,完全不需要什么 LDAP 这种东西,但是实际上不是的。

LDAP 是一个树形结构的查询性能优秀的目录数据库,可以方便的管理公司员工和部门的结构,并且 LDAP 也并非基于 HTTP 协议,硬说的话 LDAP 其实可以是一个"DB"。只不过因为是"目录结构"的数据库,所以非常适合存储树形组织的各项数据。

所以这么说来 LDAP 从技术上并非无可替代,我们完全可以用 MySQL 这种关系型数据库来做个对应的表结构来存储相同的数据,再自己写一套简单的程序要进行查询。但是 我们使用 LDAP 最大的原因之一应该就是 wiki 上说的那样:“开放的,中立的,工业标准的应用协议”,因为他足够开放、中立且应用非常广泛,我们随便一个程序都可以很快的接入进来。

我这里就不过多介绍 LDAP 了,这东西三两句是真的说不清楚,这里也主要是让大家知道"我还有什么不知道",这样后面学习也有个点可以看。(主要是我自己也没有摸的很明白,现在真是说把基本原理搞明白了然后正确的把程序接入进去了,万一我说错了什么误人子弟就不好了)。

0X03 联动

如果说把上面两个部分看完了,那么联动这里就很容易了。SSO 和 LDAP 两个东西一前一后,LDAP 可以作为 SSO 服务的后端数据库,就算是将这两个连动起来了。不过通常来说企业里也不太会联动着用,一般来说一个 LDAP 就够了,多个站点都要登录但是用的相同的用户名密码,也没有多麻烦。

0X04 参考资料

LDAP 概念和原理介绍 – WilburXu

我花了一个五一终于搞懂了OpenLDAP

单点登录 Wikipedia

☕ 如果喜欢这篇文章,欢迎打赏 5 毛钱
支付宝
支付宝二维码
USDT
USDT二维码
微信
微信二维码