SymfonyファイアウォールのLDAP認証を取得しようとしていますが、問題が発生しています。主な問題は、Symfony LdapUserProvider
に由来しているようです。ldap_bind()
を試してみると、ユーザーが入力したユーザー名とパスワードは使用されません。Symfony LDAP auth bindユーザ名とパスワード
だから、私は私のファイアウォールの設定としてこれを持っている:
$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'
),
],
],
]);
しかしldap_bind
メソッドが呼び出されたときに、私の{username}
一部は、ユーザー提供されたユーザ名に置き換えられません。そのため、ldap_bind
に渡されたdn
文字列は、文字通りuid={username},cn=users,cn=accounts,dc=MY_DC_1,dc=MY_DC_2
です。ユーザー名は置き換えられません。
このコードは予期していますが、LdapUserProvider->loadUserByUsername()
はbind
を呼び出してから文字列の置換を行います。もう1つの問題は、ユーザーが入力したパスワードがずっと後にわかることがないため、bind
コールに再度ユーザーが入力したパスワードがないことです。
dn
とパスワードを適切に置き換えるように設定するにはどうすればよいですか?私はこれらの2つの基本的なライン($data
が有効なユーザーの配列です)を使用する場合:
$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']);
をそれからそれは完全にバインドします。この2行をSymfonyファイアウォールが理解できる状況に変換するにはどうすればよいですか?