LDAP (Light-weight Directory Access Protocol) 是企业广泛部署的用户信息管理服务器,微软的活动目录服务器(Active Directory)完全兼容 LDAP。这个文档假定您已经了解了 LDAP 相关的知识和术语。
SeaTable 用户介绍
SeaTable 中的用户分为两类:
-
保存在 SeaTable 内部数据库中的用户。可能是管理员创建的用户,也可能是用户自己注册的用户
-
LDAP登录(或者其他OAuth登录)时创建到SeaTable中的用户
SeaTable 会自动从内部数据库和 LDAP 中查找用户,只要用户存在于任何一个来源,他们都能登录。
基本的 LDAP/AD 集成配置
SeaTable 要求 LDAP/AD 服务器中每个用户都有一个唯一的 ID。一般来说,AD 中用
ObjectGUID
,而其他LDAP服务器用
EntryUUID
把下面的配置添加到
dtable_web_settings.py
中
ENABLE_LDAP = True
LDAP_PROVIDER = 'ldap'
LDAP_SERVER_URL = 'ldap://192.168.0.124'
LDAP_BASE_DN = 'ou=test,ou=test,dc=seatable,dc=local'
LDAP_ADMIN_DN = 'administrator@seatable.local'
LDAP_ADMIN_PASSWORD = 'Hello@123'
LDAP_LOGIN_ATTR = 'mail'
# 以下选项用于群组同步
LDAP_SYNC_GROUP = True
LDAP_GROUP_MEMBER_ATTR = 'member'
LDAP_GROUP_MEMBER_UID_ATTR = 'uid'
LDAP_USER_OBJECT_CLASS = 'person'
LDAP_GROUP_OBJECT_CLASS = 'group'
LDAP_GROUP_UUID_ATTR = 'objectGUID'
SYNC_GROUP_AS_DEPARTMENT = False
LDAP_DEPARTMENT_NAME_ATTR = ''
# 以下是可选选项
# 导入AD用户时,是否激活用户
ACTIVATE_USER_WHEN_IMPORT = True
# 是否兼容LDAP用户通过SAML单点登录方式登录
LDAP_SAML_USE_SAME_UID = True
# 该属性是LDAP中用户的角色,SeaTable使用该属性作为用户的role,默认值为''
LDAP_USER_ROLE_ATTR = 'title'
# 该属性是LDAP中用户的工号,SeaTable使用该属性作为用户的ID,默认值是''
LDAP_EMPLOYEE_ID_ATTR = 'employee_id'
# 以下两个属性用于拼接处用户的昵称:first_name last_name, 这两个是可选选项,默认是''
LDAP_USER_FIRST_NAME_ATTR = 'givenName'
LDAP_USER_LAST_NAME_ATTR = 'sn'
# 针对中文名字,将 first_name 和 last_name 的顺序反过来,这个是可选选项,默认是False
LDAP_USER_NAME_REVERSE = True
# 用作 SeaTable 中用户登录 LDAP 的属性。如果通过 email 来登录,可以使用 'mail' 或者 'userPrincipalName';如果希望通过 Windows 用户名登录,可以使用 'sAMAccountName' 属性
LDAP_LOGIN_ATTR = 'userPrincipalName'
# 该属性为用户的联系邮箱
LDAP_CONTACT_EMAIL_ATTR = 'mail'
# 用来过滤可登录的用户范围,比如限定在某个安全组内
LDAP_FILTER = 'memberOf=CN=group,CN=developers,DC=example,DC=com'
LDAP_GROUP_FILTER = 'memberOf=CN=group,CN=developers,DC=example,DC=com'
# 从 4.0 开始,支持 LDAP 登录 支持SASL认证
ENABLE_SASL = True
SASL_MECHANISM = 'DIGEST-MD5' # SASL 认证机制
SASL_AUTHC_ID_ATTR = 'cn' # olcAuthzRegexp 映射正则匹配规则中的<match>部分的uid对应的用户属性
各个配置选项的含义如下:
-
ACTIVATE_USER_WHEN_IMPORT: 导入AD用户时,是否激活用户
-
LDAP_SAML_USE_SAME_UID: 兼容LDAP用户通过SAML单点登录方式登录
-
LDAP_PROVIDER: SeaTable中用这个配置把LDAP和其他的集成的登录方法区别开来
-
LDAP_SERVER_URL: LDAP 服务器的地址 URL。如果您的 LDAP 服务器监听在非标准端口上,您也可以在 URL 里面包含端口号,如 ldap://ldap.example.com:389。
-
LDAP_BASE_DN: 在 LDAP 服务器的组织架构中,用于查询用户的根节点的唯一名称(Distingushed Name,简称 DN)。这个节点下面的所有用户都可以访问 SeaTable。
-
LDAP_ADMIN_DN: 用于查询 LDAP 服务器中信息的用户的 DN。这个用户应该有足够的权限访问 BASE 以下的所有信息。通常建议使用 LDAP/AD 的管理员用户。 注: 如果开启了 SASL 认证,这里的DN应该是 olcAuthzRegexp 映射规则中对应属性的值。
-
LDAP_ADMIN_PASSWORD: LDAP_ADMIN_DN 对应的用户的密码。 注: 如果开启了 SASL 认证,这里的密码应该是 LDAP_ADMIN_DN 对应的用户进行 SASL 认证的密码。
-
LDAP_USER_ROLE_ATTR: 该属性是LDAP中用户的角色,SeaTable使用该属性作为用户的role,默认值为''
-
LDAP_EMPLOYEE_ID_ATTR:LDAP 中用户的工号/员工ID,SeaTable 使用这个属性作为用户的 ID
-
LDAP_LOGIN_ATTR: 用作 SeaTable 中用户登录 LDAP 的属性。如果通过 email 来登录,可以使用 'mail' 属性或者 'userPrincipalName'。如果希望通过 Windows 用户名登录,可以使用 'sAMAccountName' 属性。
-
LDAP_CONTACT_EMAIL_ATTR:用于同步用户在 SeaTable 中的 contact_email。
-
LDAP_USER_FIRST_NAME_ATTR:用于拼接用户昵称
-
LDAP_USER_LAST_NAME_ATTR:用于拼接用户昵称
-
LDAP_USER_NAME_REVERSE:上面两个属性是否反转拼接
-
LDAP_SYNC_GROUP: 是否启用同步组。
-
LDAP_GROUP_MEMBER_ATTR: 加载组成员时要使用的属性字段。对于大多数AD服务器,该属性是“member”,这是默认值。对于“posixGroup”,它应该设置为“memberUid”。
-
LDAP_GROUP_MEMBER_UID_ATTR: 'memberUid'选项中设置的用户属性,用于“posixGroup”。默认值为“uid”。
-
LDAP_USER_OBJECT_CLASS: 这是用于搜索用户对象的类的名称。在 Active Directory 中,它通常是“person”。默认值为“person”。
-
LDAP_GROUP_OBJECT_CLASS: 这是用于搜索组对象的类的名称。在 AD 中,它通常是“group”;在 OpenLDAP 或其他系统中,您可以使用“groupOfNames”、“groupOfUniqueNames”或“posixGroup”,具体取决于您的 LDAP 服务器。默认值为“grroup”。
-
LDAP_GROUP_UUID_ATTR: 默认属性是“ObjectGUID”,在 AD 中可用。其他LDAP服务器请参考: https://ldapwiki.com/wiki/Universally%20Unique%20Identifier 。
-
SYNC_GROUP_AS_DEPARTMENT: 如果此选项设置为“True”,则组将同步为 SeaTable 中的顶级部门,而不是简单的组,SeaTable 中的部门是一个特殊的组。同步过程保持 OU 的层次结构。
-
LDAP_DEPARTMENT_NAME_ATTR: 获取部门名称。您可以将此配置项设置为代表“department”名称的AD字段,例如“description”。 SeaTable创建的部门名称将是AD字段中设置的部门名称,而不是OU名称。
注意:如果配置项包含中文,需要确保配置文件使用 UTF8 编码保存。
关于如何选定 LDAP_BASE_DN和 LDAP_ADMIN_EMAIL 的一些技巧:
-
要确定您的 LDAP_BASE_DN属性,您首先需要打开域管理器的图形界面,并浏览您的组织架构。
-
如果您想要让系统中所有用户都能够访问 SeaTable,您可以用 'cn=users,dc=yourdomain,dc=com' 作为 BASE 选项(需要替换成你们的域名)。
-
如果您只想要某个部门的人能访问,您可以把范围限定在某个 OU (Organization Unit)中。您可以使用 dsquery 命令行工具来查找相应 OU 的 DN。比如,如果 OU 的名字是 'staffs',您可以运行 dsquery ou -name staff 。更多的信息可以参考 这里 。
-
-
AD 支持使用 'user@domain.com' 格式的用户名作为 LDAP_ADMIN_EMAIL 。比如您可以使用 administrator@example.com 作为 LDAP_ADMIN_EMAIL 。有些时候 AD 不能正确识别这种格式。此时您可以使用 dsquery 来查找用户的 DN。比如,假设用户名是 'seatableuser',运行 dsquery user -name seatableuser 来找到该用户的 。更多的信息可以参考 这里 。
LDAP 同步用户和群组
SeaTable 定期同步 LDAP 用户和组。在 dtable-events.conf 文件中增加以下配置选项,重启 SeaTable,以便生效。
[LDAP_SYNC]
enabled = true
sync_interval = 60 # 单位是秒
注:
如果需要同步群组,需要在
dtable_web_settings.py
中添加相应的配置项,具体配置,请参考上文中
基本的 LDAP/AD 集成配置
。