ldap系列基础知识

编程

ldap 是什么?

LDAP(Lightweight Directory Access Protocol)即轻量级目录访问协议,提供信息服务。那啥是目录服务呢?

目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力。目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略。

LDAP目录中的信息是是按照树型结构组织,具体信息存储在条目(entry)的数据结构中。条目相当于关系数据库中表的记录;条目是具有区别名DN (Distinguished Name)的属性(Attribute),DN是用来引用条目的,DN相当于关系数据库表中的关键字(Primary Key)。属性由类型(Type)和一个或多个值(Values)组成,相当于关系数据库中的字段(Field)由字段名和数据类型组成,只是为了方便检索的需要,LDAP中的Type可以有多个Value,而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的。LDAP中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。LDAP把数据存放在文件中,为提高效率可以使用基于索引的文件数据库,而不是关系数据库。

LDAP的信息是以树型结构存储的,在树根一般定义国家(c=CN)或域名(dc=com),在其下则往往定义一个或多个组织 (organization)(o=Acme)或组织单元(organizational units) (ou=People)。

每一个entry都可以由对象类别(objectClass)的属性来支持哪些属性进行控制,该属性的值决定了该条目必须遵循的一些规则,比如,inetorgPerson对象类需要支持sn(surname)和cn(common name)属性,但也可以包含可选的如邮件,电话号码等属性。

例如上图的babs条目中:

DN:uid=babs,ou=people,dc=example,dc=com,相对于ou=people,dc=example,dc=com 节点的rDN:uid=babs

ObjectClass:Person

通常一个节点用一个dn(Distinguished Name)来标识其唯一性,举一个更加通俗的例子:cn=张三,ou=测试部门,dc=example.com 如此的一个表达式即说明,员工张三是测试部门的,并且是example.com公司的员工。

LDAP简称对应

  • o:organization(组织-公司)
  • ou:organization unit(组织单元-部门)
  • c:countryName(国家)
  • dc:domainComponent(域名)
  • sn:suer name(真实名称)
  • cn:common name(常用名称)

ldap特点:

  • LDAP的结构用树来表示,而不是用表格。正因为这样,就不能用SQL语句了
  • LDAP可以很快地得到查询结果,不过在写方面,就慢得多
  • LDAP提供了静态数据的快速查询方式
  • Client/server模型,Server 用于存储数据,Client提供操作目录信息树的工具
  • 这些工具可以将数据库的内容以文本格式(LDAP 数据交换格式,LDIF)呈现在您的面前
  • LDAP是一种开放Internet标准,LDAP协议是跨平台的Interent协议

ldap 能干什么?

使用目录服务器最常见的情况就是多系统间的集中用户管理,比如公司会使用OA,Confluence,gitlab,jira等等办公系统。如果每个系统都需要我们记住一个账号密码,那无疑是很费力的。通过使用LDAP目录服务器将多个应用的用户集中管理起来,每个应用都通过通用的LDAP协议与目录服务器通信,达到用户信息集中管理的目的。事实上很多的开源项目都支持LDAP用户认证(例如SuperSet,Hue等等)。目录服务可以存储包括个人信息、web链结、jpeg图像等各种信息。因此,很多企业用来管理组织机构和用户,做身份的统一认证。

 

踩坑:

刚开始,萌新通常对objectclass是很懵逼的,他到底约束了哪些属性,哪些又是必须填的??不填或者填写的格式不对,都会报错,让人简直咬牙切齿。下面简单说下我遇到的问题。

通常,我们需要把一个组织机构挂在一个某个节点下,需要提供下面两个objectclass就可以了:

objectclass: top

objectclass: organizationalUnit

而top是organizationalUnit的父类。因此organizationalUnit可以拥有top的所有属性,请注意,ou属性必填

通常我们把一个人挂在某个节点下,提供以下约束:

objectclass: top

objectclass: person

objectclass: organizationalPerson

objectclass: inetOrgPerson

以上四个类,从下往上依次为继承关系,请注意:sn和cn两个属性是必填的。

 

下篇博客我们将一起去安装opendj服务器:

ldap相关资料:

https://docs.oracle.com/javase/jndi/tutorial/ldap/security/ldap.html

 

https://juejin.im/post/5a7fe036f265da4e7e10b3da

 

https://www.cnblogs.com/lxlovezhd/archive/2013/05/29/3105350.html

 

https://www.jianshu.com/p/68748bc289b2

 

https://lsc-project.org/doku.php    //LDAP Synchronization Connector

https://lsc-project.org/documentation/latest/development/start

https://lsc-project.org/documentation/2.0/development/ideintegration   //如何集成到开发工具中

https://lsc-project.org/download  //lsc下载地址

以上是 ldap系列基础知识 的全部内容, 来源链接: utcz.com/z/511916.html

回到顶部