LDAP
夜莺( Nightingale )单点登录功能介绍
配置舉例
# 启用LDAP身份验证,默认false
Enable = true
# LDAP服务器的主机名或IP地址,客户端将连接到此服务器进行身份验证
Host = '10.99.0.170'
# LDAP服务器的端口号,默认端口是389
Port = 389
# LDAP目录树中的起始点,所有搜索操作都将在此基础DN下进行
BaseDn = 'dc=n9e,dc=com'
# 用于绑定到LDAP服务器的用户DN
BindUser = 'cn=binduser,dc=n9e,dc=com'
# 用于绑定到LDAP服务器的用户的密码
BindPass = '1234'
# 查找用户的LDAP搜索过滤器,%s将被替换为实际的用户名
AuthFilter = "(&(sAMAccountName=%s))"
# 是否覆盖用户属性,设置为true表示当从LDAP同步用户信息时,将覆盖现有的用户属性
CoverAttributes = true
# 是否覆盖团队设置
CoverTeams = false
# 是否启用TLS连接
TLS = false
# 是否启用StartTLS
StartTLS = false
# 用户在系统中的默认角色
DefaultRoles = ['Guest']
# 用户在系统中的默认团队
DefaultTeams = [21]
# 用户属性映射
[Attributes]
# 映射到LDAP中的displayName
Nickname = 'displayName'
# 映射到LDAP中的mobile
Phone = 'mobile'
# Email映射到LDAP中的mail
Email = 'mail'
基础配置详解
Enable = true 为LDAP配置的开关;
Host = '10.99.0.170' 后面需要填写LDAP服务器的主机名或IP地址;
Port = 389 对应LDAP服务的端口号,默认端口为389;
BaseDn = 'dc=n9e,dc=com' 是LDAP服务的目录树起点(如下图所示);

BindUser = 'cn=binduser,dc=n9e,dc=com' 用于绑定到LDAP服务器的用户DN。该用户需要有足够的权限来搜索用户和验证凭证;(这个用户需要在LDAP中先创建并设置权限)
BindPass = '1234' 用于绑定到LDAP服务器的用户密码;
下面是一个LDAP创建binduser和ACL的配置简单实例:
1. 创建 bind 用户文件 `binduser.ldif`
root@9a90f3b798ee:/# cat binduser.ldif
# Entry for bind user
# 注意替换 cn/dc 相关信息
dn: cn=binduser,dc=n9e,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
cn: binduser
sn: Bind
uid: binduser
userPassword: 1234
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/binduser
2. 创建 bind 用户 ACL 文件
root@9a90f3b798ee:/# cat binduser-acl.ldif
# Add ACL for bind user
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
# 注意替换 dc/cn 等相关信息
olcAccess: to dn.subtree="dc=n9e,dc=com"
by dn.exact="cn=binduser,dc=n9e,dc=com" read
by * none
3. 创建 bind 用户,注意修改 dc/cn 信息,-w 参数后面填写 admin 的密码
ldapadd -x -D "cn=admin,dc=n9e,dc=com" -w 1234 -f binduser.ldif
4. 添加 bind 用户 ACL,注意修改 dc/cn 信息,-w 参数后面填写 admin 的密码
ldapmodify -x -D "cn=admin,dc=n9e,dc=com" -w 1234 -f binduser-acl.ldif

TLS = false 选项为 true | false,根据LDAP设置情况开启。
StartTLS = false 选项为 true | false,根据LDAP设置情况开启。
DefaultRoles = ['Guest'] 设置LDAP账号登录夜莺后的账号权限,选项为 Admin / Standard / Guest;
DefaultTeams = [21] 设置LDAP账号登录夜莺后的账号归属业务组ID(如下图所示);

其他配置没有特殊需求可以保持默认即可,配置信息修改好后保存文件,就可以测试使用LDAP账号进行登录了。


常见问题
Q1:LDAP 配置好后用户登录提示"用户名或密码错误"?
A:按这个顺序排查:
- 绑定账号(Bind DN)权限不足 — 必须能搜索整个 OU 才能找到用户;
- 搜索过滤器(User Filter)错 — 常见是
(uid={username})vs(sAMAccountName={username})(OpenLDAP vs AD); - 网络 — 在 n9e Server 主机上
ldapsearch -H ldap://your-ldap:389 -D admin -W -b OU=...测试连通性; - TLS — LDAPS(636 端口)需要导入 LDAP 服务器证书或者临时开"跳过证书验证"。
Q2:登录成功但用户名 / 邮箱字段没同步?
A:检查 AttributeMap 配置 — 把 LDAP 属性名映射到夜莺的字段:AttrUsername = uid(或 AD 的 sAMAccountName)、AttrEmail = mail、AttrPhone = mobile、AttrNickname = cn / displayName。
Q3:AD 域的兼容性怎么样?
A:完全支持 Active Directory。注意 AD 特有的:
- 用户名属性通常是
sAMAccountName而不是uid; - Base DN 写完整 OU 路径(如
OU=Users,DC=corp,DC=example,DC=com); - 域账号有时要带域名前缀(
CORP\\username)。
Q4:能否通过 LDAP 自动同步组关系到夜莺团队?
A:当前不支持自动同步 LDAP group → 夜莺 team。变通用脚本定期读 LDAP group 写入夜莺团队,或改用 OIDC(部分 IDP 支持把 group 塞到 token claims)。