Recientemente estoy desarrollando para mi empresa una intranet utilizando Symfony 2.2, en la cual tenemos un AD y pretendo utilizar el login contra éste (como ya existe en la intranet actual) para tener así todo unificado (sesión del SO, mail, intranet..). Actualmente me encuentro en el inicio de su desarrollo y esta corre bajo un XAMPP en local, utilizo Git para versiones.
Como pone en el título del post, me he decantado por utilizar el bundle BorisMorel/LdapBundle: [URL="https://github.com/BorisMorel/LdapBundle"]https://github.com/BorisMorel/LdapBundle[/URL]
He realizado una pequeña prueba con la función nativa de PHP para autenticarse por LDAP con motivo de saber si funciona o si el problema se debe a una mala configuración del XAMPP.
Código:
De este modo con los credenciales válidos hace login, por lo que descarto una mala configuración del server.$ldaprdn = '****'; $ldappass = '****'; $handle = ldap_connect('***.***.local'); $bind = ldap_bind($handle, $ldaprdn, $ldappass) or die ('Bad cred'); echo $bind;
Los pasos que he seguido son los siguientes:
1. Instalo el bundle, añadiendo al composer:
Código:
2. Agrego a app/config/routing.yml:"require": { "imag/ldap-bundle": "dev-master"
Código:
El cual he dejado como viene con la ruta de login:imag_ldap: resource: "@IMAGLdapBundle/Resources/config/routing.yml"
Código:
3. A continuación dejo el fichero app/config/security.yml del siguiente modo:login: pattern: /login defaults: { _controller: IMAGLdapBundle:Default:login } requirements: _method: GET login_check: pattern: /login_check logout: pattern: /logout
Código:
He probado con muchas configuraciones, comentando el user_class, el user_id (+ con dn y username), diferentes versiones, skip_roles, etc. y nada.. Siempre me devuelve un error de credenciales.security: firewalls: restricted_area: pattern: ^/ anonymous: ~ provider: ldap imag_ldap: ~ # alternative configuration # imag_ldap: # login_path: /ninja/login logout: path: /logout target: / providers: ldap: id: imag_ldap.security.user.provider encoders: IMAG\LdapBundle\User\LdapUser: plaintext access_control: - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/, roles: IS_AUTHENTICATED_FULLY } imag_ldap: client: host: ****.****.local port: 389 # version: 3 # username: foo # Optional # password: bar # Optional # network_timeout: 10 # Optional # referrals_enabled: true # Optional # bind_username_before: true skip_roles: false user: base_dn: ou=users,dc=****,dc=**** # base_dn: ou=people,dc=host,dc=foo # filter: (&(foo=bar)(ObjectClass=Person)) #Optional name_attribute: uid role: base_dn: ou=group, dc=****, dc=**** # filter: (ou=group) #Optional name_attribute: cn user_attribute: member user_id: username #[ dn or username ] user_class: IMAG\LdapBundle\User\LdapUser
Viendo el log me doy cuenta que el nombre del host y puerto están correctos ya que el error que me devuelve es el siguiente:
Código:
Si pongo mal el host/puerto el error que me da es -1 en lugar de 1 y me dice que no encuentra el servidor.[2015-06-22 11:56:34] ldap_connection.ERROR: LDAP returned an error with code 1 : Operations error [] [] [2015-06-22 11:56:34] security.INFO: Authentication request failed: No autentifica [] []
Tras debuggear un poco lo que me ha dado la espina es que la pantalla de login que trae por defecto el bundle no me funciona del todo bien, como que no envía los credenciales que introduzco.
Agradezco de antemano todas las respuestas, llevo ya días dándole vueltas y no logro hacer que funcione.
Un saludo