heimrichhannot / contao-ldap-bundle
此插件提供有关 Contao CMS 的 LDAP 服务器功能。
Requires
- php: ^7.4
- ext-ldap: *
- contao/core-bundle: ^4.9
- heimrichhannot/contao-request-bundle: ^1.2
- heimrichhannot/contao-utils-bundle: ^2.196
- symfony/ldap: ^4.4
Requires (Dev)
- contao/manager-plugin: ^2.0
- contao/test-case: 1.1.*
- friendsofphp/php-cs-fixer: ^2.2
- php-coveralls/php-coveralls: ^2.0
- php-http/guzzle6-adapter: ^1.1
- php-http/message-factory: ^1.0.2
- phpunit/phpunit: ^6.0
- symfony/phpunit-bridge: ^3.2
This package is auto-updated.
Last update: 2024-09-13 10:15:38 UTC
README
此插件提供有关 Contao CMS 的 LDAP 服务器功能。
功能
- 从 LDAP 服务器同步用户及其组(适用于前端成员和后端用户)
- 通过命令和/或按需同步(前端和后端登录 -> 无需自定义登录模块)
安装和配置
- 运行
composer require heimrichhannot/contao-ldap-bundle
。 - 更新数据库。
- 重要:为安全起见,请先备份您的表
tl_user
、tl_user_group
、tl_member
和tl_member_group
。 - 根据“配置”部分所述创建您的配置。
- 如果您的系统不在开发环境中,请清除缓存。
配置
运行 vendor/bin/contao-console config:dump-reference huh_ldap
以查看完整的配置引用。
以下是一个同步后端用户的示例配置(成员配置几乎相同)
huh_ldap: user: connection: # here you can pass in all options allowed in symfony/ldap connections host: localhost encryption: ssl bind_dn: cn=admin,dc=example,dc=com bind_password: some_password person_username_ldap_field: uid # this field is used to match the username in contao login forms with the ldap representation person: # config for persons admin_gid_number: 5002 base_dn: ou=People,dc=example,dc=com group: # config for groups base_dn: ou=Groups,dc=example,dc=com
技术细节
同步是如何工作的?
基本上,通过运行命令 vendor/bin/contao-console huh_ldap:sync_persons
,将用户和组导入到您在 config.yml
配置中指定的位置。您可以使用此操作来检索所有用户/成员。
此外,在登录(后端和前端)时,从 ldap 获取给定用户名的数据并将其同步到本地实体(您可以在 person_username_ldap_field
配置中指定要使用的字段)。
在大多数情况下,您不一定需要每天晚上作为 cronjob 调用该命令,因为数据是在登录时按需检索的。不过,如果您需要最新数据,可以随时调用此命令 ;-)
如果用户/成员已经在本地和 ldap 目录中存在怎么办?
如果用户或成员通过用户名在本地系统中和 ldap 目录中已存在,但尚未“迁移”,即数据库中设置了 ldapUidNumber
,怎么办?
在这种情况下,匹配是通过 contao 和 ldap 中的用户名值(由您的配置中的 person_username_ldap_field
指定的字段)来完成的。然后设置相应的 ldapUidNumber
,并将 ldap 目录中的数据存储到本地用户对象中,以确保一切同步。
此外,默认情况下,以下字段从 ldap 同步到本地用户/成员
- 用户名
- 电子邮件
- 名、姓(成员)
- 名称(用户)
如果组已经在本地和 ldap 目录中存在怎么办?
由于组没有像用户那样唯一的字段,如果想要避免在 ldap 和本地中都已存在的组再次在本地添加,需要在导入之前手动设置相应的 tl_member
/tl_user
数据库记录中的 ldapGidNumber
。