拉至文末 参加抽奖
随着 5G 技术的兴起,以及各种智能终端的普及,云办公市场迎来加速发展期。关注【融云 RongCloud】,了解协同办公平台更多干货。
更加灵活、高效的跨平台移动协同办公已成主流,企业通讯录作为企业协同办公的核心基础和触发统一通信及其它相关业务的入口,重要性不言而喻。
时至今日,企业通讯录,已不只是通讯录。
图 1 - 企业级通讯录入口概念
企业通讯录核心技术 LDAP
由于历史原因,各企业会采用私有或其它不同标准实现通讯录功能,这样就造成了网络中存在不同的地址薄系统服务,导致用户的通讯录数据不一致。
为此,开放式移动联盟(OMA,Open Mobile Alliance)提出了融合地址簿(CAB,Converged Address Book)研究项目,目的是形成一个统一的地址薄系统标准,使得所有用户及业务可以共享该地址薄,从而提高服务质量,改善用户体验。
通讯录的标准除了 CAB 外,还有富通信技术标准 RCS(Rich Communication Suite)。RCS 也是一个标准化组织,由欧洲运营商发起成立,目前己被纳入了 GSM Assiciation(全球移动通信系统协会)。RCS 主要是由 EAB(增强地址薄)和 NAB(网络地址薄)组成,不过 RCS 中制定的通讯录标准,是个人通讯录标准。
EAB 是本地个人通讯录系统的扩展,NAB 是给本地通讯录 EAB 增加了网络功能,用户可以将本地创建的通讯录 EAB 上传到网络中,而本地通讯录的同步与管理不用负责。
虽然 CAB 和 RCS 都对通讯录业务作了实现上的标准定义,如通讯录的数据模型定义,需要具备哪些业务功能等,但这些标准是为个人通讯录定制的,并没有考虑到企业通讯录的业务场景和安全性。而协同办公的通讯录业务与上述标准存在较大差异,因此在研究企业通讯录时,必须结合实际应用场景,而不能全盘模仿以上两种标准。
当前,很多企业通讯录主要采用 LDAP 实现“安全通讯”的功能,以下将就 LDAP 原理和特点展开介绍。
LDAP 协议研究
LDAP(Lightweight Directory Access Protocol)即轻量级目录访问协议,诞生于美国密歇根大学。
LDAP 优化了查询速度,采用树状信息存储模式,可分布式部署,访问控制灵活,凭借着开放性、扩展性以及易于开发等优势成为一款标准的目录访问协议,已被广泛应用于基础性的信息管理系统中。
LDAP 原理
LDAP 协议由四大模型构成:
信息模型:用于描述 LDAP 的信息表示方式
【属性】
LDAP 目录服务的存储基于条目(Entry),每个条目包含一组属性,用来表示现实世界中真实的实体信息,条目与属性的关系如下图:
图 2 - 条目、属性、值之间关系
【对象类】
现实世界中实体之间往往具有一些相同或相似的特性,被划分为不同的类在 IDAP 目录服务中。目录条目中还包含了一个重要属性即对象类(objectclass)属性,该属性决定了目录条目中必须包含以及可能包含哪些属性,其中必须包含的属性称为强制性的(mandatory),可能包含的属性称为可选的(optional)。
对象类可以自定义,自定义的对象类遵循继承机制,子类继承父类所有的强制属性和可选属性。对象类 top 是所有类的父类也就是根,一切对象类都由 top 类派生而来。
在 top 类中定义了强制属性 “object class”可以保证每个条目至少包含一个对象类,同时也满足了目录条目至少要有一个对象类才能添加到目录中的要求。
【模式】
目录的模式(Schema)是由目录中所有的属性、对象类、语法以及匹配规则的定义的集合组成,Schema 决定了数据在目录中的存储形式,LDAP 本身也定义了。
标准 Schema,包括系统对象类、属性类型、语法和匹配规则。这些系统 Schema 都在 LDAP 标准中进行了规范,可以查看 LDAP 的 RFC 文件。当然,各个行业也可以自定义 Schema 来达到自己的应用需求。这跟 XML 类似,XML 既有标准的定义,各行业也可根据自己的需要定制 DTD 或 DOM。
不过,为了以后系统的兼容性,建议在使用 LDAP 时尽量使用标准的 Schema。
命名模型:描述 LDAP 中的数据如何组织
LDAP 中的所有条目按照层次模型进行存储,逻辑上是一个分级或树状结构,可称为目录信息树(Directory InformationTree, DIT),这与 DNS 类似,DNS 也是按照分级结构组织的,这都是为了更好的存储或搜索目录树中的对象。
为了能够正确查找到对应对象,每个对象在 DIT 中必须有唯一的标识符,如区别名 (Distinguished Name, DN),DN 可以表示在 DIT 范围内一个对象的完整路径,它由从根目录名到该对象所在目录路径组成。
除此之外,我们也可以使用相对有区别名(Relative Distinguished Names, RDN,RDN 是 DN 的子集。在 DIT 中最顶层的节点代表国家如 US 或 CN,它们的子节点可以是公司或者省份。
子节点可以代表具体的人或者某些具体资源,如以下 DN 可以用来标识图中的用户 YANG: D: Cn=YANG,ou=CS,o=sict,c=CN。
其中 Cn 代表普通名词(common name),ou 代表组织单元(orginzation unit),o 代表组织(orginzation),C 代表国家(country)。
图 3 - 目录信息树
功能模型:描述 LDAP 中的数据操作访问
功能模型描述了 LDAP 服务所支持的对目录的所有操作,LDAP 客户端与服务端的交互如图 4 所示,主要支持三种操作:
图 4 - 客户端与服务端交互图
【查询操作】
客户端利用 LDAP 提供的查询接口,并附带 baseDN(查询起点)、scope(查询范围)、filter(过滤)等相关参数可进行查询操作。
【更改操作】
更改操作主要包括 add、delete、modify,也就是增、删、改操作。add 和 delete 可以实现目录条目的添加和删除,modify 可以实现条目的修改。
虽然 LDAP 目录服务不支持事物(transaction),但是对目录条目的修改操作应该是原子的 (atomic),并支持 all-or-noting 原则。
【认证操作】
LDAP 中有三个关于认证的操作,一个是 bind 操作,主要用于初始化一个客户端与服务端之间的会话,ubind 用于终止这个会话,abandon 操作允许客户端向服务端请求终止一个操作。
安全模型:描述 LDAP 中的安全机制
LDAP 主要通过身份认证、安全通道和访问控制实现安全机制,具体描述如下:
【身份认证】
当客户端程序想和服务端程序建立初始会话时,首先服务端需要对客户端进行身份认证,身份认证方式根据不同的级别有不同的认证方式,有安全无保障的基于匿名的访问方式,有基于明文密码的认证方式以及更加安全的 SASL(Simple Authentication and Secure Layer)机制的加密会话。客户端程序可以根据自己的需求选择合适的认证方式。
【安全通道】
客户端程序与服务端程序之间交互的数据,LDAP 采用 SSL/TLS 安全协议提供安全保障,目前 Internet 中采用的 https 传输协议就是通过 SSL/TLS 提供安全传输的。SSL/TLS 采用了 IKI 信息安全技术,通过它可以为传输中的数据提供完整性和保密性服务,还可以实现客户端和服务端身份的双向认证。
【访问控制】
LDAP 目录服务为了保护一些敏感信息资源,其定义了一系列的访问控制规则,这些规则可以控制不同实体对不同目录节点的访问权限。
LDAP
支持跨平台
LDAP 数据库以及它的相关资源可以部署到不同的平台,如 Linux 或 Windows,也可以进行跨平台移植。
开源性协议
用户开发时可以从它的开源实现中定制需要的模块,实现程序的通用性,也方便二次开发和后期维护。LDAP 服务器复制数据方法多样,可采用“推”或“拉”,比如 LDAP 服务器可以把用户数据推到远程备份服务器,实现用户数据的备份。
优化读取操作
LDAP 对读取操作进行了优化,加快了读取速度。如果用户的数据不需要经常更新,但需要频繁读取,用 LDAP 存储是很好的选择。
这也是利用 LDAP 进行用户信息存储的一个原因,用户一般只会读取自己的信息,而很少去修改自己的信息。
按照树状结构存储信息
LDAP 按照树状结构存储信息,可以体现成员的层级归属和简单属性。便于企业对全体员工的管理、组织和访问权限的控制,也提高了员工的访问速度。因此 LDAP 十分适合作通讯录的存储。
在沟通逐渐无界化的今天,LDAP 正在念好安全“紧箍咒”。企业通讯录作为企业内外统一通信的“主干路”,安全性至关重要。而基于 LDAP 设计的目录服务,可为企业通讯录提供细粒度权限控制,确保沟通顺畅、安全无虞。
互动有奖
互动奖品:
① 关注本公众号,回复 融云 获取抽奖小程序
② 转发本篇文章到朋友圈且不设置分组
※ 幸运同学将由抽奖助手随机抽出,记得完成以上两个动作,以便兑奖时验证嗷~
※ 本活动最终解释权归融云所有