2017-01-17 6 views
0

Я работаю над проектом Symfony 3.2 и пытаюсь реализовать процесс аутентификации на AD компании через LDAP. Я не понимаю все о AD и LDAP, я обычно больше разбираюсь в среде Linux prod, но я знаю достаточно для этого проекта, и у Symfony есть теоретически все, что мне нужно.Symfony 3 Ошибка аутентификации и авторизации LDAP: не удалось выполнить поиск

У меня возникает другая проблема в зависимости от определения службы.

Во-первых, общий код

security.yml

provider_company_ldap: 
      ldap: 
       base_dn: dc=domaine,dc=local 
       search_dn: ~ 
       search_password: ~ 
       service: company.ldap 
       default_roles: ROLE_USER 

company_ldap_firewall: 
     anonymous: true 
     provider: provider_company_ldap 
     form_login_ldap: 
      service: company.ldap 
      login_path: company_rhag_user_login 
      check_path: company_rhag_user_check 
      dn_string: 'sAMAccountName={username},ou=Utilisateurs,dc=domaine,dc=local' 
     pattern: ^/ 

access_control: 
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin, roles: ROLE_ADMIN } 
    - { path: ^/, roles: ROLE_USER } 

CompanyBundle: Пользователь: login.html.twig

<form action="{{ path('company_rhag_user_check') }}" method="post" class="form-horizontal"> 

     <div class="form-group"> 
      <label for="username" class="col-sm-2 control-label"> 
       Login : 
      </label> 
      <div class="col-sm-10"> 
       <input type="text" class="form-control" value="{{ last_username }}" 
        id="username" name="_username" required="required" /> 
      </div> 
     </div> 

     <div class="form-group"> 
      <label for="password" class="col-sm-2 control-label"> 
       Password : 
      </label> 
      <div class="col-sm-10"> 
       <input type="password" class="form-control" value="" 
        id="password" name="_password" required="required" /> 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-sm-offset-2 col-sm-10"> 
       <button type="submit" class="btn" id="_submit" name="_submit"> 
       Connexion 
       </button> 
      </div> 
     </div> 
</form> 

первый случай: обслуживание с классом Ldap

Использование класса Ldap как LdapClient отмечен устаревшим и будет удален в 4.0:

services: 
    company.ldap: 
     class: Symfony\Component\Ldap\Ldap 
     arguments: 
      - '%dbldap_host%'  # local ip for AD server 

С этой услугой, страница не может отобразить, и сообщение об ошибке:

FatalThrowableError in Ldap.php line 28: Type error: Argument 1 passed to Symfony\Component\Ldap\Ldap::__construct() must be an instance of Symfony\Component\Ldap\Adapter\AdapterInterface, string given, called in C:\blahblahblah\var\cache\dev\appDevDebugProjectContainer.php on line 446

второго случай: осуждаются LdapClient класс

Итак, я попытался с устаревшим классом класса LdapClient:

services: 
    company.ldap: 
     class: Symfony\Component\Ldap\LdapClient 
     arguments: 
      - '%dbldap_host%'  # local ip for AD server 

При этом форма входа в систему отображается правильно, на панели инструментов Symfony отображается аутентификация как anon., С правой ссылкой company_ldap_firewall. Пока все не будет хорошо, если я проигнорирую устаревшее предупреждение. При подаче, какими бы ни были полномочия, я получил это сообщение:

Could not complete search with dn "dc=domaine,dc=local", query "(sAMAccountName=loginvalue)" and filters "*"

Конечно, лучшим решением было бы использовать класс не-осуждается службы, но на данный момент, любой рабочий раствор будет делать ,

Благодарю вас за ваше время и вашу помощь.

+0

+1 У меня такой же вопрос. Не удалось выполнить поиск с помощью dn "dc = domaine, dc = local", query "(sAMAccountName = loginvalue)" и фильтрует "*" – Vittore

ответ

0

Используя класс ldap, вы должны передавать аргумент типа AdapterInterface, а не строку (это показано в полученном сообщении об ошибке). Существует хороший пример этого в документации:

Symfony 3.2 - Authenticating against an LDAP server:

services: 
    ldap: 
     class: Symfony\Component\Ldap\Ldap 
     arguments: ['@ext_ldap_adapter'] 
    ext_ldap_adapter: 
     class: Symfony\Component\Ldap\Adapter\ExtLdap\Adapter 
     arguments: 
      - host: my-server 
       port: 389 
       encryption: tls 
       options: 
        protocol_version: 3 
        referrals: false 

Где аргументы для службы ext_ldap_adapter будет вашим LDAP конфигурации.

 Смежные вопросы

  • Нет связанных вопросов^_^