Я пытаюсь аутентифицировать пользователей через ldap (активный каталог окна) с Symfony 3.4, и я использую этот документация
Пожалуйста, помогите мне!!!!
Но я получаю ошибку:
php.DEBUG: Warning: ldap_bind(): Unable to bind to server: Invalid credentials {"exception":"[object] (Symfony\Component\Debug\Exception\SilencedErrorContext: {\"severity\":2,\"file\":\"C:\\OSPanel\\domains\\warcsymfony\\vendor\\symfony\\symfony\\src\\Symfony\\Component\\Ldap\\Adapter\\ExtLdap\\Connection.php\",\"line\":53,\"trace\":[{\"file\":\"C:\\OSPanel\\domains\\warcsymfony\\vendor\\symfony\\symfony\\src\\Symfony\\Component\\Ldap\\Ldap.php\",\"line\":38,\"function\":\"bind\",\"class\":\"Symfony\\Component\\Ldap\\Adapter\\ExtLdap\\Connection\",\"type\":\"->\"}],\"count\":1})"} [] [2018-03-14 10:27:03] security.INFO: Authentication request failed. {"exception":"[object] (Symfony\Component\Security\Core\Exception\BadCredentialsException(code: 0): Bad credentials. at C:\OSPanel\domains\warcsymfony\vendor\symfony\symfony\src\Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider.php:71, Symfony\Component\Security\Core\Exception\UsernameNotFoundException(code: 0): User \"testusername\" not found. at C:\OSPanel\domains\warcsymfony\vendor\symfony\symfony\src\Symfony\Component\Security\Core\User\LdapUserProvider.php:75, Symfony\Component\Ldap\Exception\ConnectionException(code: 0): Invalid credentials at C:\OSPanel\domains\warcsymfony\vendor\symfony\symfony\src\Symfony\Component\Ldap\Adapter\ExtLdap\Connection.php:54)"} [] [2018-03-14 10:27:03] security.DEBUG: Authentication failure, redirect triggered. {"failure_path":"login"} []
Я попробовал изменить параметры, но это не сработало
security.yml
security:
providers:
my_ldap:
ldap:
service: Symfony\Component\Ldap\Ldap
base_dn: DC=example,DC=com
search_dn: 'OU=all-users-accounts,DC=example,DC=com'
search_password: password
default_roles: ROLE_USER
uid_key: sAMAccountName
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
anonymous: ~
form_login_ldap:
login_path: login
check_path: login
service: Symfony\Component\Ldap\Ldap
dn_string: 'sAMAccountName = {username},DC=example,DC=com'
service.yml
services:
Symfony\Component\Ldap\Ldap:
arguments: ['@Symfony\Component\Ldap\Adapter\ExtLdap\Adapter']
Symfony\Component\Ldap\Adapter\ExtLdap\Adapter:
arguments:
- host: **.**.**.**
port: 389
encryption: 'none'
options:
protocol_version: 3
referrals: false
SecurityController
/**
* @Route("/login", name = "login")
*/
public function loginAction(Request $request, AuthenticationUtils $authenticationUtils){
$error = $authenticationUtils->getLastAuthenticationError();
$username = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', array(
'last_username' => $username,
'error' => $error
));
}
@Agris не работает, все сделал правильно. Строка search_dn является всего лишь примером.




Так что проверено и работает. Я думаю, в чем была ваша ошибка: search_dn, search_password и query_string.
my_ldap:
ldap:
service: Symfony\Component\Ldap\Ldap
base_dn: "DC=example,DC=lv"
#remmber this is ldap user with read only permisions
#could be also just username search_dn:"bind"
search_dn: "CN=bind bind,CN=Users,DC=example,DC=lv"
search_password: "bind user password"
uid_key: sAMAccountName
в примере формы я использовал строку запроса - она проверяет, является ли sAMAccoutName и является ли членом SystemGroup.
form_login_ldap:
provider: my_ldap
login_path: login_route
check_path: login_check_form
service: Symfony\Component\Ldap\Ldap
dn_string: 'DC=example,DC=lv'
query_string: '(&(sAMAccountName = {username})(memberof=CN=SystemGroup,OU=Groups,OU=xxx_users,DC=example,DC=lv))'
Просто проверьте свою query_string с помощью ldap_search http://php.net/manual/en/function.ldap-search.php#112191
Я считаю, что это ваш search_dn неверен, эта строка:
search_dn: 'OU=all-users-accounts,DC=example,DC=com'
Это должен быть dn администратора, который имеет доступ для просмотра Active Directory. Вы можете использовать Бесплатный браузер LDAP от Softerra, чтобы просмотреть активный каталог и выяснить это.
Все это описано в моей статье Аутентификация AD компонента Symfony LDAP. Имейте в виду, что вам нужно много отладить, чтобы это заработало, но как только вы начнете работать, это будет легко.
Мне просто нужно ldap_bind (), мне не нужно читать информацию о пользователе, просто проверяю имя пользователя и пароль. Я тестировал собственный код без компонента symfony ldap, и он работал.
Компоненту Symfony LDAP требуется учетная запись администратора, которая может читать AD.
Не могу открыть вашу ссылку: alvinbunk.wordpress.com/2017/09/07/…
Ссылка у меня работает нормально! Просто нажмите на это прямо в этом посте.
, DC = example, DC = example 'последний DC в строке search_dn должен быть DC = com