@@ -246,7 +246,7 @@ Authenticating against an LDAP server can be done using either the form
246
246
login or the HTTP Basic authentication providers.
247
247
248
248
They 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 :
250
250
251
251
service
252
252
.......
@@ -270,6 +270,28 @@ For example, if your users have DN strings in the form
270
270
``uid=einstein,dc=example,dc=com ``, then the ``dn_string `` will be
271
271
``uid={username},dc=example,dc=com ``.
272
272
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
+
273
295
Examples are provided below, for both ``form_login_ldap `` and
274
296
``http_basic_ldap ``.
275
297
@@ -288,8 +310,6 @@ Configuration example for form login
288
310
main :
289
311
# ...
290
312
form_login_ldap :
291
- login_path : login
292
- check_path : login_check
293
313
# ...
294
314
service : ldap
295
315
dn_string : ' uid={username},dc=example,dc=com'
@@ -307,8 +327,6 @@ Configuration example for form login
307
327
<config >
308
328
<firewall name =" main" >
309
329
<form-login-ldap
310
- login-path =" login"
311
- check-path =" login_check"
312
330
service =" ldap"
313
331
dn-string =" uid={username},dc=example,dc=com" />
314
332
</firewall >
@@ -321,8 +339,6 @@ Configuration example for form login
321
339
'firewalls' => array(
322
340
'main' => array(
323
341
'form_login_ldap' => array(
324
- 'login_path' => 'login',
325
- 'check_path' => 'login_check',
326
342
'service' => 'ldap',
327
343
'dn_string' => 'uid={username},dc=example,dc=com',
328
344
// ...
@@ -382,5 +398,61 @@ Configuration example for HTTP Basic
382
398
),
383
399
);
384
400
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
+
385
457
.. _`RFC4515` : http://www.faqs.org/rfcs/rfc4515.html
386
458
.. _`LDAP injection` : http://projects.webappsec.org/w/page/13246947/LDAP%20Injection
0 commit comments