Подключение / привязка к Active Directory (Windows) с использованием LDAP в Symfony 3 без использования строки dn

Я пытаюсь аутентифицировать пользователей в моей компании для приложений Symfony3, используя Active Directory. Моя текущая конфигурация выглядит следующим образом (она также была успешно протестирована с онлайн-тестовым сервером LDAP, поэтому я могу подтвердить правильность конфигурации Symfony).

//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

Когда я пытаюсь войти, мне будет отказано на основании «неверных учетных данных», хотя я уверен, что мои учетные данные вводятся правильно. Я надеюсь, что основной проблемой здесь является то, что «search_dn» & «search_password» мои, и у меня нет прав администратора в нашей AD. Похоже (согласно документации Symfony) эти кредиты должны принадлежать администратору AD. Я жду этой информации от моего системного администратора, но она должна была пройти по цепочке, поэтому это может занять некоторое время. Я попытался заменить их обоих нулями, который выдает другую ошибку.

Мой вопрос приходит в этот момент, так как я на самом деле могу установить успешное соединение & связать с нашей AD, используя только PHP с помощью следующего кода:

//ldapconnect.php

$ldap = ldap_connect("host.dom1.dom2.net");

if (ldap_bind($ldap, "[email protected]", "myPassword")) {
echo "login successful";
} else {
echo "Incorrect Login";
}

По сути, я смотрю, смогу ли я каким-либо образом воспроизвести вышеупомянутый автономный код привязки PHP ldap в моем проекте Symfony (кажется, что причиной является проблема в строке dn, необходимой в Symfony). Я довольно новичок в этом, поэтому я не могу понять, почему автономный код PHP разрешает связывание LDAP, в то время как использование строки dn этого не делает (кроме того, что наша AD, возможно, блокирует запрос, когда используется строка 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}'

Похоже, что теперь я, по крайней мере, могу привязаться к серверу ldap, однако я все еще получаю неверные учетные данные с ошибкой «пользователь не найден»:

//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)"} []

Я также подвергаю сомнению эту ошибку «User \» myUsername \ «not found» ближе к концу третьей строки, выполняет ли поиск в AD имя пользователя «myUsername \» и добавляет обратную косую черту? Это может быть просто формат кода ошибки, так как он выглядит правильным во второй строке и начале третьей строки.

Редактировать 2:

Я, наконец, установил соединение, правильная конфигурация выглядит следующим образом:

//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}'

Из моего предыдущего редактирования все, что мне нужно было сделать, это удалить «CN = Users» из base_dn, так как учетные записи пользователей там фактически не находились, удалив это и просто оставив компоненты домена, что позволило всей нашей AD найти пользователя. Еще одно важное замечание: dn_string должен быть настроен как
‘MYDOMAIN \ {username}’, иначе аутентификация не пройдет (согласно ответу Элвина Банка). Как указывает Элвин в своей статье, ссылки на которую приведены ниже, эта часть, к сожалению, не упоминается в документации Symfony LDAP.

0

Решение

Взгляните на мою недавнюю статью об этом:

https://alvinbunk.wordpress.com/2017/09/07/symfony-ldap-component-ad-authentication/

Я подозреваю, что вам просто нужно изменить свой dn_string вот так:

dn_string: 'DOMAIN\{username}'

Пожалуйста, прочитайте мою статью. Также попробуйте:

default_roles: ROLE_USER

Вы также можете попробовать использовать http_basic_ldap согласно моей статье и проверьте журнал разработки. Это, наверное, что-то простое — не сдавайся!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]