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