@@ -246,7 +246,7 @@ Authenticating against an LDAP server can be done using either the form
246246login or the HTTP Basic authentication providers.
247247
248248They are configured exactly as their non-LDAP counterparts, with the
249- addition of two configuration keys:
249+ addition of two configuration keys and one optional key :
250250
251251service
252252.......
@@ -270,6 +270,28 @@ For example, if your users have DN strings in the form
270270``uid=einstein,dc=example,dc=com ``, then the ``dn_string `` will be
271271``uid={username},dc=example,dc=com ``.
272272
273+ query_string
274+ ............
275+
276+ **type **: ``string `` **default **: ``null ``
277+
278+ This (optional) key makes the user provider search for a user and then use the
279+ found DN for the bind process. This is useful when using multiple LDAP user
280+ providers with different ``base_dn ``. The value of this option must be a valid
281+ search string (e.g. ``uid="{username}" ``). The placeholder value will be
282+ replaced by the actual username.
283+
284+ When this option is used, ``dn_string `` has to be updated accordingly. Following
285+ the previous example, if your users have the following two DN:
286+ ``dc=companyA,dc=example,dc=com `` and ``dc=companyB,dc=example,dc=com ``, then
287+ ``dn_string `` should be ``dc=example,dc=com ``. If the ``query_string `` option is
288+ ``uid="{username}" ``, then the authentication provider can authenticate users
289+ from both DN.
290+
291+ Bear in mind that usernames must be unique across both DN, as the authentication
292+ provider won't be able to select the correct user for the bind process if more
293+ than one is found.
294+
273295Examples are provided below, for both ``form_login_ldap `` and
274296``http_basic_ldap ``.
275297
@@ -288,8 +310,6 @@ Configuration example for form login
288310 main :
289311 # ...
290312 form_login_ldap :
291- login_path : login
292- check_path : login_check
293313 # ...
294314 service : ldap
295315 dn_string : ' uid={username},dc=example,dc=com'
@@ -307,8 +327,6 @@ Configuration example for form login
307327 <config >
308328 <firewall name =" main" >
309329 <form-login-ldap
310- login-path =" login"
311- check-path =" login_check"
312330 service =" ldap"
313331 dn-string =" uid={username},dc=example,dc=com" />
314332 </firewall >
@@ -321,8 +339,6 @@ Configuration example for form login
321339 'firewalls' => array(
322340 'main' => array(
323341 'form_login_ldap' => array(
324- 'login_path' => 'login',
325- 'check_path' => 'login_check',
326342 'service' => 'ldap',
327343 'dn_string' => 'uid={username},dc=example,dc=com',
328344 // ...
@@ -382,5 +398,61 @@ Configuration example for HTTP Basic
382398 ),
383399 );
384400
401+ Configuration example for form login and query_string
402+ .....................................................
403+
404+ .. configuration-block ::
405+
406+ .. code-block :: yaml
407+
408+ # app/config/security.yml
409+ security :
410+ # ...
411+
412+ firewalls :
413+ main :
414+ # ...
415+ form_login_ldap :
416+ # ...
417+ service : ldap
418+ dn_string : ' dc=example,dc=com'
419+ query_string : ' (&(uid={username})(memberOf=cn=users,ou=Services,dc=example,dc=com))'
420+
421+ .. code-block :: xml
422+
423+ <!-- app/config/security.xml -->
424+ <?xml version =" 1.0" encoding =" UTF-8" ?>
425+ <srv : container xmlns =" http://symfony.com/schema/dic/security"
426+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
427+ xmlns : srv =" http://symfony.com/schema/dic/services"
428+ xsi : schemaLocation =" http://symfony.com/schema/dic/services
429+ http://symfony.com/schema/dic/services/services-1.0.xsd" >
430+
431+ <config >
432+ <firewall name =" main" >
433+ <form-login-ldap
434+ service =" ldap"
435+ dn-string =" dc=example,dc=com"
436+ query-string =" (& (uid={username})(memberOf=cn=users,ou=Services,dc=example,dc=com))" />
437+ </firewall >
438+ </config >
439+ </srv : container >
440+
441+ .. code-block :: php
442+
443+ // app/config/security.php
444+ $container->loadFromExtension('security', array(
445+ 'firewalls' => array(
446+ 'main' => array(
447+ 'form_login_ldap' => array(
448+ 'service' => 'ldap',
449+ 'dn_string' => 'dc=example,dc=com',
450+ 'query_string' => '(& (uid={username})(memberOf=cn=users,ou=Services,dc=example,dc=com))',
451+ // ...
452+ ),
453+ ),
454+ )
455+ );
456+
385457 .. _`RFC4515` : http://www.faqs.org/rfcs/rfc4515.html
386458.. _`LDAP injection` : http://projects.webappsec.org/w/page/13246947/LDAP%20Injection
0 commit comments