Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". # LDAP bundle This bundle binds the database with an ldap directory. The bundle synchronize the ldap directory with users in the database. It also provides a way to check user credentials against the ldap directory. :local: ###### Current limitations - The length of the ldap dn must be < 255 characters - if the username extracted from the ldap is updated, the changes are not reflected in the database and remains the same ###### Entities provided This bundle provides only one entity : :class:[Chill\\LdapBundle\\Entity\\UserLdapBinding` ###### How the synchronizer works ? #. The synchronizer performs a query on `dn` and `query` defined in the [configuration ](configuration.md). #. For each entry returned by the query, it looks if the `dn` exists in the database #. If the entry does not exists : #. the synchronizer looks for user with same username as defined by `username_attr`, and bind it with the `dn` if it exists. #. else, a user is created with username defined by `username_attr` (if the ldap contains more than one attribute, the first attribute returned is used) #. if a user exists which is already binded with the `dn`, the entry is ignored. #. The synchronizer looks for dn existing in database and which were not returned by the query performed in 1. #. If they exists, those user are set to `enabled=false`: they are not allowed to login. ###### Installation This bundle requires : - PHP LDAP ext - `symfony/ldap` with minimal version 3.1. Note that, currently, Chill uses Symfony 2.8: you should add the dependency on this single package manually In your composer.json, for stable version : "require": { // .. other dependencies "symfony/ldap" : "~3.1", "chill-project/ldap": "~1.0" } And for dev version : "require": { // .. other dependencies "symfony/ldap" : "~3.1", "chill-project/ldap": "dev-master@dev" } ###### Configuration ## Configuration of the bundle # Default configuration for extension with alias: "chill_ldap" chill_ldap: server: # Required # the host of the ldap directory host: ~ # Required, Example: localhost # the port to reach the ldap directory port: 389 # the version of the ldap directory version: 3 # Is the use of ssl required to establish connection use_ssl: false # Is the use of startssl required to establish connection use_starttls: false # the user to bind to dn directory. Required for searching existing users. bind_dn: ~ # Required, Example: cn=user,dn=chill,dn=social # the user's password to bind to dn directory. bind_password: ~ # Required, Example: paSSw0rD user_query: # Required # The DN where the query is executed dn: ~ # Example: ou=People,dc=champs-libres,dc=coop # The query which will allow to retrieve users query: ~ # Example: (&(objectClass=inetOrgPerson)(userPassword=*)) # The attribute which will provide username (=login) username_attr: cn Example : chill_ldap: server: # host, bind_dn and bind_password are imported from parameters.yml host: "%ldap_host%" bind_dn: "%ldap_bind_dn%" bind_password: "%ldap_bind_password%" user_query: dn: dc=champs-libres,dc=coop query: "(&(objectClass=inetOrgPerson)(userPassword=*))" ## Configuration of the security part of chill Simply add the following config in the firewall of the security bundle : `chill_ldap_form_login: ~`. This config is located in `app/config/security.yml` Example of a configuration : # in app/config/security.yml firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false default: anonymous: ~ # enable the login check by a form, agaisnt the database form_login: csrf_parameter: _csrf_token csrf_token_id: authenticate csrf_provider: form.csrf_provider # enable the login check by a form, against the ldap chill_ldap_form_login: ~ # this is the line you should add Note that, if you enable the login check by form **and** by the ldap, the password will be checked against the database **and** against the ldap. If one of them match, the login will succeed. If you want to completely disable login check against the database, simply remove the `form_login` entry and all his options. ## Command and crontab Synchronize the database : php app/console chill:ldap:synchronize For getting more debug message : php app/console chill:ldap:synchronize -vvv You should run this command regularly (using crontab or `systemd timer ](https://www.freedesktop.org/software/systemd/man/systemd.timer.html#)) to synchronize ldap and database automatically.