在企业中,LDAP(轻量级目录访问协议)是一种标准的目录服务协议,用来集中管理用户信息、权限和组织结构。想象一下,如果你有100个员工,需要为他们创建账号、管理权限、更新信息,LDAP 就像一个中央通讯录,所有用户信息都存在一个地方。
LDAP 的核心优势:
常见的 LDAP 实现:
在 n8n 中,LDAP 节点就像一个魔法钥匙,它可以直接连接到你的 LDAP 服务器,执行各种操作,包括:
| 操作 | 说明 | 使用场景 |
|---|---|---|
| Search(搜索) | 查询LDAP目录中的用户或组 | 查找所有销售部员工 |
| Create(创建) | 在LDAP中添加新用户条目 | 新员工入职,自动创建账号 |
| Update(更新) | 修改现有用户的属性 | 更新员工的部门、邮箱等信息 |
| Delete(删除) | 删除用户条目 | 员工离职,删除账号 |
| Compare(比较) | 比较属性值 | 验证密码是否正确 |
| Rename(重命名) | 修改条目的专有名称(DN) | 组织结构调整 |
在使用 LDAP 节点前,你需要连接到真实的 LDAP 服务器。以下是配置步骤:
ldap.example.com)cn=admin,dc=example,dc=com)dc=example,dc=com)配置示例(以 Active Directory 为例):
- Host: ldap.corp.com
- Port: 389
- Bind DN: cn=Administrator,cn=Users,dc=corp,dc=com
- Bind Password: [你的密码]
- Base DN: dc=corp,dc=com最常用的操作是搜索 (Search)。假设你要查找所有邮箱为 @company.com 的用户:
ou=users,dc=company,dc=com(搜索的起点)inetOrgPerson(搜索用户对象)mail(要搜索的属性字段)*@company.com(搜索条件,* 代表通配符)DN 是 LDAP 中的唯一标识符,就像每个人的身份证号。它从具体到抽象逐层组织,通常看起来像这样:
uid=john.doe,ou=users,ou=sales,dc=company,dc=com解读这个 DN:
uid=john.doe → 用户ID是 john.doeou=users → 这个用户属于 users 组织单位ou=sales → sales 部门下dc=company,dc=com → company.com 域快速记忆: DN = 从叶子到根的完整路径,就像文件系统的绝对路径!
| 属性 | 含义 | 示例 |
|---|---|---|
uid | 用户唯一标识 | john.doe |
cn | 常用名称 | John Doe |
mail | 邮箱地址 | john^company.com |
sn | 姓氏 | Doe |
givenName | 名字 | John |
ou | 组织单位 | Sales |
department | 部门 | Sales Department |
telephoneNumber | 电话 | +1-555-0123 |
memberOf | 所属组 | cn=sales-group,ou=groups,dc=company,dc=com |
HR部门每次新员工入职时,都需要:
现在我们用 n8n 自动化完成这个流程!
启动触发 → 获取员工信息 → 创建 LDAP 用户 → 验证成功 → 发送欢迎邮件下面是这个工作流的完整 JSON 配置,你可以直接导入到 n8n 中使用:
{
"name": "员工入职自动化 - LDAP用户创建",
"nodes": [
{
"parameters": {},
"id": "11ed7c55-b2dd-4c9a-8505-5c0d8b6e9f4a",
"name": "When called via webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [250, 300],
"webhookId": "9a8b7c6d-5e4f-3g2h-1i0j-9k8l7m6n5o4p"
},
{
"parameters": {
"operation": "search",
"ldapCredential": "ldap_prod",
"baseDn": "ou=users,dc=company,dc=com",
"searchFor": "inetOrgPerson",
"attribute": "uid",
"searchText": "{{ $json.employee_id }}",
"returnAll": false,
"limit": 1
},
"id": "21ed7c55-b2dd-4c9a-8505-5c0d8b6e9f4b",
"name": "检查用户是否存在",
"type": "n8n-nodes-base.ldap",
"typeVersion": 1,
"position": [500, 300]
},
{
"parameters": {
"conditions": {
"stringConditions": [
{
"value1": "{{ $nodes['检查用户是否存在'].data.length }}",
"operation": "equals",
"value2": "0"
}
]
}
},
"id": "31ed7c55-b2dd-4c9a-8505-5c0d8b6e9f4c",
"name": "用户不存在?",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [750, 300]
},
{
"parameters": {
"operation": "create",
"ldapCredential": "ldap_prod",
"dn": "uid={{ $json.employee_id }},ou=users,dc=company,dc=com",
"attributes": [
{
"attributeId": "objectClass",
"value": "inetOrgPerson"
},
{
"attributeId": "uid",
"value": "{{ $json.employee_id }}"
},
{
"attributeId": "cn",
"value": "{{ $json.employee_name }}"
},
{
"attributeId": "sn",
"value": "{{ $json.employee_lastname }}"
},
{
"attributeId": "mail",
"value": "{{ $json.employee_email }}"
},
{
"attributeId": "telephoneNumber",
"value": "{{ $json.employee_phone }}"
},
{
"attributeId": "department",
"value": "{{ $json.department }}"
},
{
"attributeId": "userPassword",
"value": "{{ $json.initial_password }}"
}
]
},
"id": "41ed7c55-b2dd-4c9a-8505-5c0d8b6e9f4d",
"name": "创建新 LDAP 用户",
"type": "n8n-nodes-base.ldap",
"typeVersion": 1,
"position": [1000, 200]
},
{
"parameters": {
"operation": "search",
"ldapCredential": "ldap_prod",
"baseDn": "ou=users,dc=company,dc=com",
"searchFor": "inetOrgPerson",
"attribute": "uid",
"searchText": "{{ $json.employee_id }}",
"returnAll": false,
"limit": 1
},
"id": "51ed7c55-b2dd-4c9a-8505-5c0d8b6e9f4e",
"name": "验证用户创建成功",
"type": "n8n-nodes-base.ldap",
"typeVersion": 1,
"position": [1250, 200]
},
{
"parameters": {
"emailAddress": "{{ $json.employee_email }}",
"subject": "欢迎加入我们!你的账号已创建",
"textContent": "亲爱的 {{ $json.employee_name }},\n\n欢迎加入公司!\n\n你的用户ID:{{ $json.employee_id }}\n你的初始密码:{{ $json.initial_password }}\n\n请妥善保管,并在首次登录时修改密码。\n\n如有问题,请联系IT部门。",
"mode": "composedHTML"
},
"id": "61ed7c55-b2dd-4c9a-8505-5c0d8b6e9f4f",
"name": "发送欢迎邮件",
"type": "n8n-nodes-base.sendGrid",
"typeVersion": 1,
"position": [1500, 200]
},
{
"parameters": {
"respondWith": "first_entry_json"
},
"id": "71ed7c55-b2dd-4c9a-8505-5c0d8b6e9f4g",
"name": "返回结果",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [1750, 200]
}
],
"connections": {
"When called via webhook": {
"main": [
[
{
"node": "检查用户是否存在",
"type": "main",
"index": 0
}
]
]
},
"检查用户是否存在": {
"main": [
[
{
"node": "用户不存在?",
"type": "main",
"index": 0
}
]
]
},
"用户不存在?": {
"main": [
[
{
"node": "创建新 LDAP 用户",
"type": "main",
"index": 0
}
],
[
{
"node": "返回结果",
"type": "main",
"index": 0
}
]
]
},
"创建新 LDAP 用户": {
"main": [
[
{
"node": "验证用户创建成功",
"type": "main",
"index": 0
}
]
]
},
"验证用户创建成功": {
"main": [
[
{
"node": "发送欢迎邮件",
"type": "main",
"index": 0
}
]
]
},
"发送欢迎邮件": {
"main": [
[
{
"node": "返回结果",
"type": "main",
"index": 0
}
]
]
}
}
}.json 文件后选择在 Webhook 节点测试时,使用以下 JSON 数据:
{
"employee_id": "johndoe",
"employee_name": "John",
"employee_lastname": "Doe",
"employee_email": "john.doe@company.com",
"employee_phone": "+1-555-0123",
"department": "Sales",
"initial_password": "TempPass123!"
}原因:LDAP 服务器地址或端口错误
解决:
原因:DN 格式错误
解决:
attribute=value,attribute=value,...原因:管理员权限不足
解决:
如果你有一个 CSV 文件包含100个新员工信息,可以这样做:
在创建 LDAP 用户后,自动同步到:
设置 Cron 触发器每月运行,自动:
✨ 你现在已经掌握了:
🚀 接下来的步骤:
[1] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.ldap/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#