Buenas a todos, soy nuevo por aquí y en el mundillo de Symfony, llevo aproximadamente un mes trasteando con él a ratos y me parece un muy buen y potente framework. Hasta ahora no me ha dado problemas pero llegado al punto del login estoy un poco atascado, os comento:
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:
$ldaprdn = '****';
$ldappass = '****';
$handle = ldap_connect('***.***.local');
$bind = ldap_bind($handle, $ldaprdn, $ldappass) or die ('Bad cred');
echo $bind;
De este modo con los credenciales válidos hace login, por lo que descarto una mala configuración del server.
Los pasos que he seguido son los siguientes:
1. Instalo el bundle, añadiendo al composer:
Código:
"require": {
"imag/ldap-bundle": "dev-master"
2. Agrego a app/config/routing.yml:
Código:
imag_ldap:
resource: "@IMAGLdapBundle/Resources/config/routing.yml"
El cual he dejado como viene con la ruta de login:
Código:
login:
pattern: /login
defaults: { _controller: IMAGLdapBundle:Default:login }
requirements:
_method: GET
login_check:
pattern: /login_check
logout:
pattern: /logout
3. A continuación dejo el fichero app/config/security.yml del siguiente modo:
Código:
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
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.
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:
[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 [] []
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.
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