天天看点

LDAP-初见

目录

什么是LDAP?

LDAP 协议能解决什么问题?

Spring Boot中使用LDAP来统一管理用户信息

添加用户

连接LDAP服务端

LDAP 的全称是 Lightweight Directory Access Protocol,「轻量目录访问协议」。

所以说,LDAP 「是一个协议」,约定了 Client 与 Server 之间的信息交互格式、使用的端口号、认证方式等内容。而 「LDAP 协议的实现」,有着众多版本,例如微软的 Active Directory 是 LDAP 在 Windows 上的实现,AD 实现了 LDAP 所需的树形数据库、具体如何解析请求数据并到数据库查询然后返回结果等功能。再例如 OpenLDAP 是可以运行在 Linux 上的 LDAP 协议的开源实现。而我们平常说的 LDAP Server,一般指的是安装并配置了 Active Directory、OpenLDAP 这些程序的服务器。

历史原因,LDAP 协议诞生于 1988 年,比万维网的诞生还要早。1989 年英国科学家蒂姆·伯纳斯-李发明了万维网。因此沿用至今。树形用户目录,树形存储结构,对组织管理建模符合直觉。开放的标准化协议,受到广泛支持。

目录服务就是按照「树状」存储信息的模式。目录服务的数据类型主要是「字符型」, 而不是关系数据库提供的整数、浮点数、日期、货币等类型。为了检索的需要添加了 BIN(二进制数据)、CIS(忽略大小写)、CES(大小写敏感)、TEL(电话型)等语法(Syntax)。同样也不提供象关系数据库中普遍包含的大量的函数。目录有很强的查询(读)功能,适合于进行大量数据的检索;但目录一般只执行简单的更新(写)操作,不支持批量更新所需要的事务处理功能;它主要面向数据的查询服务(查询和修改操作比一般是大于 10:1),不提供事务的回滚(rollback)机制;目录具有广泛复制信息的能力,适合于多个目录服务器同步/更新。

要说 LDAP 协议能解决什么问题,那不得不提 AD。AD 是 Windows 服务器上最强大的功能,AD 是基于 LDAP 协议的一套解决方案(LDAP 服务器 + 应用),解决了细粒度的权限控制。核心:「谁 以什么权限 访问什么」。

创建一个基础的Spring Boot项目

在<code>pom.xml</code>中引入两个重要依赖

在<code>src/test/resources</code>目录下创建<code>ldap-server.ldif</code>文件,用来存储LDAP服务端的基础数据,以备后面的程序访问之用。

在<code>application.properties</code>中添加嵌入式LDAP的配置

使用spring-data-ldap的基础用法,定义LDAP中属性与我们Java中定义实体的关系映射以及对应的Repository

通过上面的定义之后,已经将Person对象与LDAP存储内容实现了映射,我们只需要使用<code>PersonRepository</code>就可以轻松的对LDAP内容实现读写。

创建单元测试用例读取所有用户信息

启动该测试用例之后,我们可以看到控制台中输出了刚才维护在<code>ldap-server.ldif</code>中的用户信息

我们可以使用上面定义的<code>PersonRepository</code>来轻松实现操作,比如下面的代码就可以方便的往LDAP中添加用户:

例子中都采用了嵌入式的LDAP服务器,事实上这种方式也仅限于我们本地测试开发使用,真实环境下LDAP服务端必然是独立部署的。在Spring Boot的封装下,我们只需要配置下面这些参数就能将上面的例子连接到远端的LDAP而不是嵌入式的LDAP。