Ich versuche LDAP-Authentifizierung für Symfony Firewall arbeiten zu bekommen, habe aber Probleme. Das Hauptproblem scheint von der Symfony LdapUserProvider
zu stammen - es nimmt nicht den vom Benutzer angegebenen Benutzernamen und das Passwort an, wenn es versucht, ldap_bind()
.Symfony LDAP auth bind mit Benutzername und Passwort
Also, ich habe dies als meinen Firewall config:
$app->register(new SilexProvider\SecurityServiceProvider(), [
'security.firewalls' => [
'secured' => [
'pattern' => '^.*$',
'http' => true,
'users' => new \Symfony\Component\Security\Core\User\LdapUserProvider(
\Symfony\Component\Ldap\Ldap::create('ext_ldap', [
'connection_string' => 'ldap://MY_LDAP_DOMAIN',
]),
'dc=MY_DC_1,dc=MY_DC_2',
'uid={username},cn=users,cn=accounts,dc=MY_DC_1,dc=MY_DC_2'
),
],
],
]);
Aber mein {username}
Teil wird vom Benutzer angegebenen Benutzername nicht ersetzt, wenn die ldap_bind
Methode aufgerufen wird. So ist die dn
Zeichenfolge, die an ldap_bind
übergeben wird, buchstäblich uid={username},cn=users,cn=accounts,dc=MY_DC_1,dc=MY_DC_2
- der Benutzername wird nicht ersetzt.
Wenn ich durch den Code schaue, obwohl dies erwartet wird, wie LdapUserProvider->loadUserByUsername()
ruft bind
vor jeder String-Ersetzungen zu tun. Das andere Problem besteht darin, dass das vom Benutzer bereitgestellte Kennwort erst viel später bekannt ist, so dass der Anruf bind
nicht erneut das vom Benutzer angegebene Kennwort enthält.
Wie kann ich dies einrichten, so dass es meine dn
und Passwort entsprechend ersetzt? Wenn ich diese zwei Grundlinien verwenden (wo $data
ist ein Array eines gültigen):
$ldap = ldap_connect('MY_LDAP_DOMAIN');
$bind = ldap_bind($ldap, 'uid=' . $data['username'] . ',cn=users,cn=accounts,dc=MY_DC_1,dc=MY_DC_2', $data['password']);
Dann bindet sie perfekt. Wie kann ich diese zwei Zeilen in eine Situation übersetzen, die Symfony Firewall versteht?