我正在努力更换 LdapUserProvider。

我创建了我自己的提供程序(基于 LdapUserProvider 但检索更多信息的 App\Security\MyLdapUserProvider)和我自己的用户界面(App\Security\MyUser),具有更多属性来存储数据。

最后我想检索用户的组和显示名称。

这是我的配置:

服务.yaml:

# add more service definitions when explicit configuration is needed
# please note that last definitions always *replace* previous ones
Symfony\Component\Ldap\Ldap:
    arguments: ['@Symfony\Component\Ldap\Adapter\ExtLdap\Adapter']
Symfony\Component\Ldap\Adapter\ExtLdap\Adapter:
    arguments:
        - host: 10.106.1.1
          port: 389
          #encryption: tls
          options:
              protocol_version: 3
              referrals: false

安全.yaml:
providers:
    #in_memory: { memory: ~ }
    my_ldap:
        ldap:
            service: Symfony\Component\Ldap\Ldap
            base_dn: "dc=XXXXXX,dc=com"
            search_dn: "CN=XXXXXXXXXX,OU=LDAP,OU=Services Accounts,OU=Administration,DC=XXXXXXXXX,DC=com"
            search_password: "ergergergergerg"
            default_roles: ROLE_USER
            filter: "({uid_key}={username})"
            uid_key: samAccountName
            #password_attribute: displayName
firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    main:
        pattern: ^/
        security: true
        anonymous: true
        provider: my_ldap
        form_login_ldap:
            login_path: /login
            check_path: /login
            service: Symfony\Component\Ldap\Ldap
            dn_string: 'dc=XXXXXX,dc=com'
            query_string: '(samAccountName={username})'
        logout:
            path:   /logout
            target: /

我在哪里可以告诉安全提供程序使用我自己的 ldap 提供程序而不是默认提供程序?

Symfony 进程对我来说仍然有点复杂,所以如果有人能花时间解释一下..

Symfony 文档是在 CustomUserProvider > Ldap config > CustomeUserProvider... 之间重定向的无限循环。

最佳答案

如文档章节 Creating A Custom User Provider 中所述,您需要将您的用户提供程序添加为 security.providers 下的新 key ,并将其配置为 id

这个 id 是你的自定义 User Provider 服务的名称——在 symfony 的最新版本中——等于 FQCN。

# security.yaml

security:
  providers:
    # the name of your user provider can be anything
    my_ldap_provider:
      id: 'App\Security\MyLdapUserProvider'

然后,您可以将此提供程序用于防火墙之一,如下所示:
security:
  # [..]
  firewalls:
    main:
      pattern: '^/'
      provider: 'my_ldap_provider'

Symfony 的 LdapUserProvider 看起来像这样:
class LdapUserProvider implements UserProviderInterface
{
    private $ldap;
    private $baseDn;
    private $searchDn;
    private $searchPassword;
    private $defaultRoles;
    private $uidKey;
    private $defaultSearch;
    private $passwordAttribute;
    private $extraFields;

    public function __construct(
      LdapInterface $ldap,
      string $baseDn,
      string $searchDn = null,
      string $searchPassword = null,
      array $defaultRoles = [],
      string $uidKey = null,
      string $filter = null,
      string $passwordAttribute = null,
      array $extraFields = []
    )
    {

为了创建正确扩展 MyLdapUserProviderLdapUserProvider 服务,您需要这样的服务定义:
# services.yaml

services:
  App\Security\MyLdapUserProvider:
    arguments:
      $adminEmail: '%admin_email%'
      $ldap: '@Symfony\Component\Ldap\Ldap'
      $baseDn: 'dc=XXXXXX,dc=com'
      $searchDn: 'CN=XXXXXXXXXX,OU=LDAP,OU=Services Accounts,OU=Administration,DC=XXXXXXXXX,DC=com'
      $searchPassword: 'ergergergergerg'
      $defaultRoles: ['ROLE_USER']
      $filter: '({uid_key}={username})'
      $uidKey: 'samAccountName'

关于symfony - 如何在 Symfony 中扩展 LdapUserProvider 并使用自定义 LDAP 用户提供程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57092961/

10-12 17:34