跳到主内容

LDAP服务器

对于使用 LDAP 认证的系统(例如 Nexus),Casdoor 可以充当一个简单的 LDAP 服务器。它支持基于简单认证(Simple Authentication)的 bind 和 search。

端口​

LDAP服务器默认监听389端口。可以通过 conf/app.conf 中的 ldapServerPort 修改。

行为​

  • 用户条目采用 posixAccount 风格。
  • Bind:服务器解析 cn(用户名)和 ou(组织)。 dc 会被忽略。它通过 Casdoor 验证用户,并为后续操作授予权限。
  • Search:服务器检查客户端是否有权限(来自 bind),再相应返回结果。
信息

只支持 Simple Authentication。

Bind​

使用这种格式的 DN:cn=<username>,ou=<organization>,dc=example,dc=com。

示例:cn=admin,ou=built-in,dc=example,dc=com。把管理员的 DN 设成这个格式,然后用这个 DN 和用户密码进行 bind。成功后,客户端获得 search 权限。

搜索​

bind 成功后:

  • 单个用户(例如 built-in 中的 Alice):Base DN ou=built-in,dc=example,dc=com,过滤器 cn=Alice。
  • 某个组织的所有用户(例如 built-in):Base DN ou=built-in,dc=example,dc=com,过滤器 cn=*。
  • 所有组织的所有用户(如果有权限):Base DN ou=*,dc=example,dc=com,过滤器 cn=*。
  • 某个群组中的用户:使用 (memberOf=organization_name/group_name) 这样的过滤器。

用户属性​

属性描述来源
cn通用名用户名
uid用户 ID用户 ID
homeDirectory主目录/home/{username}
邮箱邮箱用户邮箱
手机电话用户手机号
sn姓用户的姓
givenName名用户的名
memberOf用户所属的组用户所属的群组
loginShell登录 shelluser.Properties["loginShell"],默认为 /bin/bash
gecosGECOS(全名)user.DisplayName,为空时退回 user.Name
sshPublicKeySSH 公钥user.Properties["sshPublicKey"],为空时省略

所有条目还带有 objectClass: posixAccount,这是 Linux 认证中 PAM 和 NSS 所必需的。

Linux 机器登录​

Casdoor 的 LDAP 服务器提供兼容 posixAccount 的条目,所以 Linux 主机可以通过 sssd、nss-ldap 或 pam_ldap 等标准工具直接用 Casdoor 认证用户。

要为每个用户设置 loginShell 和 sshPublicKey,在用户的 Properties 字段(键值映射)中设置:

{
"loginShell": "/bin/zsh",
"sshPublicKey": "ssh-ed25519 AAAA..."
}

如果没有设置 loginShell,使用 /bin/bash。如果没有 sshPublicKey,LDAP 条目中就完全不包含这个属性。

RFC 风格的功能​

Root DSE(baseDN="")​

  • namingContexts:ldapsearch -x -H ldap://<casdoor-host>:389 -D "cn=admin,ou=built-in" -w <passwd> -b "" -s base "(objectClass=*)" namingContexts,返回可见的组织 DN。
  • subschemaSubentry:ldapsearch -x -H ldap://<casdoor-host>:389 -D "cn=admin,ou=built-in" -w <passwd> -b "" -s base "(objectClass=*)" subschemaSubentry,返回 subschemaSubentry: cn=Subschema。

Schema​

查询 objectClasses:ldapsearch -x -H ldap://<casdoor-host>:389 -D "cn=admin,ou=built-in" -w <passwd> -b "cn=Subschema" -s base "(objectClass=*)" objectClasses,返回 posixAccount 和 posixGroup 的定义。

POSIX 过滤器​

  • (objectClass=posixAccount):用户列表。
  • (objectClass=posixGroup):某个组织的群组列表(例如 -b "ou=<org>" "(objectClass=posixGroup)")。
备注

(objectClass=posixGroup) 不支持 (&(objectClass=posixGroup)(cn=<group>)) 这样的组合过滤器。用 memberOf 查找群组成员。