wheregroup / symfonymultiencoderldapprovider
Symfony LDAP Auth 中的多编码器扩展
Requires
- symfony/symfony: 2.8.*
This package is auto-updated.
Last update: 2024-09-06 09:34:35 UTC
README
此模块主要开发用于在Mapbender 项目中使用,但也应适用于其他项目。示例目录中包含示例的 security.yml 和 parameter.yml。
Mapbender 中的 LDAP 配置
要在 Mapbender 中集成 LDAP 目录服务,必须对配置进行一些修改
首先,需要在 paramter.yml 中填写以下参数。所有参数都位于 ldap 命名空间中
| 表 1. - 所需参数列表
|
此外,还需要根据 Mapbender 安装调整 security.yml。在此,需要设置一个 LDAP 客户端作为 Symfonyservice。以下是根据步骤 1 中使用的参数定义的示例。
services:
ldapClient:
class: Symfony\Component\Ldap\LdapClient
arguments:
- %ldap.host% #Address to LDAPServer
- %ldap.port% #Port where LDAPServer is listening
- %ldap.version% #LDAP Protocol version
- %ldap.useSSL% # SSL #Use SSL
- %ldap.useTLS% # SSL #Use SSL
接下来,需要安装和配置 LDAPUserProvider。建议使用 WhereGroup/SymfonyMultiEncoderLDAPProvider。该模块是为 Mapbender 开发的,并作为 composer 包提供。可以通过以下命令将其添加到项目中:
composer require WhereGroup/SymfonyMultiEncoderLDAPProvider
配置方式如下示例所示。请注意,@ldapClient
的值必须替换为先前定义的 LDAPClient-Service 的名称。所有其他值如表 1. 所述。
mb.ldap.userProvider:
class: Wheregroup\Component\LdapMultiEncoderUserProvider
arguments:
- @ldapClient
- %ldap.user.base_dn%
- %ldap.bind.dn%
- %ldap.bind.pwd%
- %ldap.group.defaultGroups%
- %ldap.user.nameAttribute%
- %ldap.user.query% #dn
- %ldap.group.dn%
- %ldap.group.query%
- %ldap.group.nameAttribute%
然后,还需要注册新设置的 UserProvider。为此,需要在 security.yml 中扩展 providers 键,如下所示。
ldapProvider:
id: mb.ldap.userProvider
最后,必须在防火墙定义中激活 ldap-login。为此,需要将防火墙配置中的 Block fom_login 替换为以下代码。
form_login_ldap:
check_path: /user/login/check
login_path: /user/login
service: ldapClient
dn_string: %dn_search%
如果除了 LDAP 登录外,还想使用基于 fom_user 表的标准 Mapbender 登录,则不能替换 fom_login 代码块。此时将添加 form_login_ldap 代码块。
在目录中使用多个密码编码器
如果在目录服务中使用不同的编码器对不同的密码进行编码,必须在 security.yml 中进行配置。每个要使用的编码器都定义为一个命名编码器。
此时,编码器的名称必须与目录服务中使用的名称完全一致,例如,如果密码值如下所示。
{SHA512: 9a8cda40689d57f401ac182f034573d20360db3c62bb3338f83e8c11bd83bdd1
8440d1b066a0387d0a466bb945c8b6741d6d11dffa154a48b5c0fae755477b86 }
则编码器在 security.yml 中也必须命名为 SHA512。以下为 plaintext 和 SHA512 编码器的配置示例。
encoders:
FOM\UserBundle\Entity\User: plaintext
plaintext:
algorithm: plaintext
SHA512:
algorithm: sha512
iterations: 1
如果只使用一个编码器,则可以直接将其绑定到实体。
encoders:
FOM\UserBundle\Entity\User: SHA512
参数配置示例
# LDAP
ldap.host: localhost
ldap.port: 389
ldap.version: 3 # LDAP Version (default: 3)
ldap.user.baseDn: 'ou=user,dc=wheregroup,dc=com'
ldap.user.nameAttribute: cn
ldap.user.query: 'cn={username}'
ldap.group.baseDn: ou=groups,dc=exampleORG,dc=com
ldap.group.query: member=cn={username},ou=user,dc=exampleORG,dc=com
ldap.bind.dn: cn=admin ,dc=exampleORG,dc=com
ldap.bind.pwd: root
ldap.group.nameattribute: cn
ldap.group.adminFilter: (objectclass=top)
ldap.user.adminFilter: (objectclass=top)