Je tente d'authentifier les utilisateurs de mon entreprise pour les applications Symfony3 à l'aide d'Active Directory. Ma configuration actuelle est la suivante (ceci a également été testé avec succès avec un serveur de test LDAP en ligne, donc je peux confirmer que la configuration de Symfony est correcte).Connexion/liaison à Active Directory (Windows) à l'aide de LDAP dans Symfony 3 sans utiliser de chaîne dn
//services.yml
Symfony\Component\Ldap\Ldap:
arguments: ['@Symfony\Component\Ldap\Adapter\ExtLdap\Adapter']
Symfony\Component\Ldap\Adapter\ExtLdap\Adapter:
arguments:
- host: host.dom1.dom2.net
port: 389
encryption: none
options:
protocol_version: 3
referrals: false
//security.yml
my_ldap:
ldap:
service: Symfony\Component\Ldap\Ldap
base_dn: dc=dom1,dc=dom2,dc=net
search_dn: "cn=myUsername,dc=dom1,dc=dom2,dc=net"
search_password: myPassword
default_roles: ROLE_ADMIN
uid_key: sAMAccountName
....
firewalls:
form_login_ldap:
provider: my_ldap
service: Symfony\Component\Ldap\Ldap
dn_string: 'sAMAccountName={username},dc=dom1,dc=dom2,dc=net'
login_path: login
check_path: login
default_target_path: /index
Lorsque je tente de se connecter, j'obtiendrai refusé sur la base « des informations d'identification non valides » alors que je suis sûr que mes lettres de créance sont entrés correctement. J'espère que le problème principal ici est que le "search_dn" & "search_password" est le mien, et je n'ai pas les droits d'administrateur dans notre AD. Il apparaît (selon la documentation de Symfony) que ces creds doivent être ceux d'un administrateur AD. J'attends cette information de mon administrateur, mais il a fallu remonter la chaîne, cela peut prendre un certain temps. J'ai essayé de les remplacer par des zéros, ce qui provoque une erreur différente.
Ma question arrive à ce moment que je réellement suis en mesure d'établir une connexion réussie & liaison avec notre AD en utilisant seul PHP avec le code suivant:
//ldapconnect.php
$ldap = ldap_connect("host.dom1.dom2.net");
if (ldap_bind($ldap, "[email protected]", "myPassword")) {
echo "login successful";
} else {
echo "Incorrect Login";
}
Fondamentalement, je suis à la recherche pour voir si je peux réplique d'une manière ou d'une autre le code de liaut PHP ldap autonome ci-dessus dans mon projet Symfony (il semble que la chaîne dn requise dans Symfony cause le problème). Je suis assez nouveau à ce sujet donc je ne comprends pas pourquoi le code PHP autonome permet la liaison LDAP tout en utilisant la chaîne dn ne pas (autre que notre AD est probablement bloquer la requête lorsque dn chaîne utilisée).
Merci d'avance pour toute aide.
Edit: mis à jour avec lecture seule-admin information recherche dn:
//security.yml
my_ldap:
ldap:
service: Symfony\Component\Ldap\Ldap
base_dn: 'CN=Users,dc=dom1,dc=dom2,dc=net'
search_dn: "cn=ReadOnlyAdmin,OU=ou1,OU=ou2,dc=dom1,dc=dom2,dc=net"
search_password: adminPass
default_roles: ROLE_USER
uid_key: sAMAccountName
....
firewalls:
http_basic_ldap:
provider: my_ldap
service: Symfony\Component\Ldap\Ldap
dn_string: 'DOMAIN\{username}'
Il semble que je suis au moins capable de se lier au serveur ldap maintenant, mais je suis toujours des titres de compétences non valides avec « utilisateur introuvable » erreur:
//dev.log
[2017-09-11 13:10:15] request.INFO: Matched route "app_default_admin". {"route":"app_default_admin","route_parameters":{"_controller":"AppBundle\\Controller\\DefaultController::adminAction","_route":"app_default_admin"},"request_uri":"http://localhost:8000/index","method":"GET"} []
[2017-09-11 13:10:15] security.INFO: Basic authentication Authorization header found for user. {"username":"myUsername"} []
[2017-09-11 13:10:15] security.INFO: Basic authentication failed for user. {"username":"myUsername","exception":"[object] (Symfony\\Component\\Security\\Core\\Exception\\BadCredentialsException(code: 0): Bad credentials. at C:\\pathtoSymfonyProject\\vendor\\symfony\\symfony\\src\\Symfony\\Component\\Security\\Core\\Authentication\\Provider\\UserAuthenticationProvider.php:73, Symfony\\Component\\Security\\Core\\Exception\\UsernameNotFoundException(code: 0): User \"myUsername\" not found. at C:\\pathtoSymfonyProject\\vendor\\symfony\\symfony\\src\\Symfony\\Component\\Security\\Core\\User\\LdapUserProvider.php:82)"} []
Je me demande aussi ce « \ user » myusername \ « introuvable » erreur vers la fin de la troisième ligne, est-il à la recherche AD pour nom d'utilisateur « myusername \ » et ajouter une barre oblique inverse? Cela pourrait juste être le format du code d'erreur car il semble être correct dans la deuxième ligne et le début de la troisième ligne.
Edit 2:
J'ai finalement eu la connexion de travail, la configuration correcte est la suivante:
//security.yml
my_ldap:
ldap:
service: Symfony\Component\Ldap\Ldap
base_dn: 'dc=dom1,dc=dom2,dc=net'
search_dn: "cn=ReadOnlyAdmin,OU=ou1,OU=ou2,dc=dom1,dc=dom2,dc=net"
search_password: 'adminPass'
default_roles: ROLE_USER
uid_key: sAMAccountName
....
firewalls:
http_basic_ldap:
provider: my_ldap
service: Symfony\Component\Ldap\Ldap
dn_string: 'MYDOMAIN\{username}'
De mon édition précédente, tout ce que je devais faire était enlever « CN = Utilisateurs "du base_dn car les comptes d'utilisateurs ne se trouvaient pas réellement là, en supprimant cela et en laissant juste les composants de domaine a permis à notre AD entière d'être recherchée pour l'utilisateur. Une autre remarque importante est que le dn_string doit être configuré comme 'MYDOMAIN \ {nom d'utilisateur}' ou l'authentification ne passera pas (par réponse d'Alvin Bunk). Comme Alvin le souligne dans son article ci-dessous, cette partie n'est malheureusement pas mentionnée dans la documentation de Symfony LDAP.
Salut Alvin, merci pour la réponse rapide. J'ai mis à jour ma configuration pour refléter votre suggestion avec ce qui est posté dans votre article. J'ai également depuis reçu le compte en lecture seule-admin pour notre AD. J'ai mis à jour mon message pour montrer la nouvelle configuration avec le message du journal des erreurs. Il semble que je suis maintenant capable de me lier au serveur ldap, mais je reçois toujours une erreur 'bad credentials'/'user not found' (le journal des erreurs est également visible dans edit). – TomShelby
Est-ce que "DOMAIN" est le domaine Windows correct? J'en doute? Je l'ai donné comme exemple ... Le message d'erreur montre juste des citations autour de 'myUsername', ce qui est correct. Avec le navigateur LDAP, avez-vous recherché 'myUsername' sous la baseDN' CN = Users, dc = dom1, dc = dom2, dc = net'. L'utilisateur 'myUsername' doit également exister ici. Je pense que vous l'avez presque réussi! –
Vous pouvez également essayer [Explorateur Active Directory] (https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer) et essayez avec votre compte en lecture seule, puis développez 'CN = Configuration, DC = dom1, DC = dom2, DC = net' et sous cela développez 'CN = Partitions'. Vous devriez avoir un domaine Windows à utiliser sous cela. Il aura une valeur 'nETBIOSName'. –