集成LDAP登录
LDAP 概述
- LDAP 数据结构为树形结构;
- LDAP 读性能很好,但写性能很差;
- LDAP 是一种开放 Internet 标准,LDAP 协议是跨平台的 Internet 协议
LDAP 基本概念
Entry
条目,也叫记录项,是 LDAP 中最基本的颗粒。
DN = Distinguished Name 唯一标识名,例如
cn=baby,ou=marketing,dc=mydomain,dc=org
RDN 相对唯一标识名,如
cn=baby
Base DN 目录树的最顶部,即根,如
dc=mydomain,dc=org
DC = Domain Componen
OU = Organization Unit 组织单元,单位(部门)名称
CN = Common Name 通用名
UID = User ID
O = Organization 组织
C = Country 国家名
ObjectClass
定义
对象类是属性的集合,LDAP 内置了很多人员机构中常见的对象。比如人员(person)含有姓(sn)、名(cn)、电话(telephoneNumber)、密码(userPassword)等属性,单位职工(organizationalPerson)是人员(person)的继承类,除了上述属性之外还含有职务(title)、邮政编码(postalCode)、通信地址(postalAddress)等属性。
作用
通过对象类可以方便的定义条目类型。每个条目可以继承多个对象类,就能拥有不同的属性。
分类
对象类分为三种:结构类型(Structural)、抽象类型(Abstract)和辅助类型(Auxiliary):
- 结构类型规定了对象实体的基本属性,每个条目属于且仅属于一个结构型对象类,
- 抽象类型可以是结构类型或其他抽象类型父类,它将对象属性中共性的部分组织在一起,称为其他类的模板,条目不能直接集成抽象型对象类。
- 辅助类型规定了对象实体的扩展属性。
Schema
对象类(ObjectClass)、属性类型(AttributeType)、语法(Syntax)分别约定了条目、属性和值,他们之间的关系如下图所示。所有这些构成了模式(Schema),即对象类的集合。
搭建 LDAP 测试服务器
使用 docker 安装 OpenLDAP 和 LAM(LDAP Account Manager)。
创建测试网络
|
|
搭建 OpenLDAP 服务
|
|
搭建 LAM 服务
|
|
LAM 配置
打开 http://localhost:1810,在右上角点击 “configuration LAM configuration”,进行配置。默认登录密码为 lam。
在 General Settings 中:
- Server Settings:修改服务器地址为
ldap://172.18.0.2:389
,修改 Tree suffix 为dc=dota2,dc=com
。 - Security Settings:修改管理员用户 DN 为
cn=admin,dc=dota2,dc=com
;
在 Active Types 中:
- 配置各 account 的 LDAP suffix 中的 dc 为上述 dc,保留 ou 不变;
保存后,回到主页面登录,使用搭建 OpenLDAP 服务时设置的管理员密码 admin@123
登录;
简单的 LDAP 登录集成
- 使用 admin 用户建立 LDAP 服务器的连接;
- 根据用户 ID 或 email 在指定搜索域中查找用户 DN;
- 校验用户的凭据;
Python
使用 ldap3 库,ldap3 库是纯 Python 实现,没有依赖,另一个库 python-ldap 需要依赖系统安装 OpenLDAP client。
demo 代码如下:
|
|