wheregroup/symfonymultiencoderldapprovider

Symfony LDAP Auth 中的多编码器扩展

0.1 2017-10-19 12:14 UTC

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)