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服务的目录树起点(如下图所示);

ldap01

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

ldap02

TLS = false 选项为 true | false,根据LDAP设置情况开启。

StartTLS = false 选项为 true | false,根据LDAP设置情况开启。

DefaultRoles = ['Guest'] 设置LDAP账号登录夜莺后的账号权限,选项为 Admin / Standard / Guest;

DefaultTeams = [21] 设置LDAP账号登录夜莺后的账号归属业务组ID(如下图所示);

ldap03

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

ldap04

ldap05

常见问题

Q1:LDAP 配置好后用户登录提示"用户名或密码错误"?

A:按这个顺序排查:

  1. 绑定账号(Bind DN)权限不足 — 必须能搜索整个 OU 才能找到用户;
  2. 搜索过滤器(User Filter)错 — 常见是 (uid={username}) vs (sAMAccountName={username})(OpenLDAP vs AD);
  3. 网络 — 在 n9e Server 主机上 ldapsearch -H ldap://your-ldap:389 -D admin -W -b OU=... 测试连通性;
  4. TLS — LDAPS(636 端口)需要导入 LDAP 服务器证书或者临时开"跳过证书验证"。

Q2:登录成功但用户名 / 邮箱字段没同步?

A:检查 AttributeMap 配置 — 把 LDAP 属性名映射到夜莺的字段:AttrUsername = uid(或 AD 的 sAMAccountName)、AttrEmail = mailAttrPhone = mobileAttrNickname = 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)。

参考资料

更新时间 2025-03-13

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云