2017-04-20 6 views
1

FOSUserBundle과 함께 FR3DLdapBundle을 사용하고 있습니다.FR3DLdapBundle - 인증 요청이 실패했습니다.

심포니 버전 3.2.6 FR3DLdapBundle 버전 3

config.yml

fos_user: 
    db_driver: orm # other valid values are 'mongodb' and 'couchdb' 
    firewall_name: main 
    user_class: AppBundle\Entity\User 
    from_email: 
     address: "%mailer_user%" 
     sender_name: "%mailer_user%" 

fr3d_ldap: 
    driver: 
     host: ldap.forumsys.com 
     port: 389 
     username: cn=read-only-admin,dc=example,dc=com 
     password: password 
     bindRequiresDn: true 
    user: 
     baseDn: dc=example,dc=com 
     filter: (&(objectClass=person)) 
     attributes: 
      - { ldap_attr: uid, user_method: setUsername } 

security.yml

encoders: 
    FOS\UserBundle\Model\UserInterface: bcrypt 
    AppBundle\Entity\User: plaintext 

erase_credentials: false 

role_hierarchy: 
    ROLE_ADMIN:  ROLE_USER 
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN] 

providers: 
    chain_provider: 
     chain: 
      providers: [fr3d_ldapbundle,fos_userbundle] 

    fr3d_ldapbundle: 
     id: fr3d_ldap.security.user.provider 

    fos_userbundle: 
     id: fos_user.user_provider.username 

firewalls: 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 
    main: 
     pattern: ^/ 
     fr3d_ldap: ~ 
     form_login: 
      provider: chain_provider 
      always_use_default_target_path: true 
      default_target_path:/
     logout:  true 
     anonymous: true 

encoders: 
    AcmeBundle\Acme\User\LdapUser: plaintext 

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/, role: ROLE_USER } 

은 내가 Online LDAP Test Server와 서비스를 테스트합니다. 나는 다음과 같은 설정을 가진 성공적인 로그인을 관리해야 :

fr3d_ldap: 
driver: 
    host: ldap.forumsys.com 
    port: 389 
    #version: 3 
    username: cn=read-only-admin,dc=example,dc=com 
    password: password 
    bindRequiresDn: true 

user: 
    baseDn: uid=euclid,dc=example,dc=com 
    filter: (&(objectClass=person)) 
    attributes: 
     - { ldap_attr: uid, user_method: setUsername } 

하지만 난 단지 사용자 유클리드로 로그인 할 수 있습니다이 설정의 문제. 하지만 모든 사용 가능한 사용자로 로그인하고 싶습니다.

하지만 다른 구성에서는 로그에 메시지가 표시되지만 사용자는 발견되었지만 익스 페세이션이 발생했습니다.

2017-04-20 09:36:16] ldap_driver.DEBUG: ldap_search(dc=example,dc=com, (&(&(objectClass=person))(uid=einstein)), [array]) {"action":"ldap_search","base_dn":"dc=example,dc=com","filter":"(&(&(objectClass=person))(uid=einstein))","attributes":[]} []

[2017-04-20 09:36:17] security.INFO: User einstein found on LDAP {"action":"loadUserByUsername","username":"einstein","result":"found"} []

[2017-04-20 09:36:17] ldap_driver.DEBUG: ldap_bind(einstein, ****) {"action":"ldap_bind","bind_rdn":"einstein"} []

[2017-04-20 09:36:17] ldap_driver.DEBUG: exception 'Zend\Ldap\Exception\LdapException' with message '0x1: Failed to retrieve DN for account: einstein [0x1: Unexpected result count (16) for: (&(objectClass=person))]' in /vendor/zendframework/zend-ldap/src/Ldap.php:805 Stack trace: #0 /vendor/fr3d/ldap-bundle/Driver/ZendLdapDriver.php(82): Zend\Ldap\Ldap->bind('einstein', 'password') #1 /vendor/fr3d/ldap-bundle/Ldap/LdapManager.php(78): FR3D\LdapBundle\Driver\ZendLdapDriver->bind(Object(AppBundle\Entity\User), 'password') #2 /vendor/fr3d/ldap-bundle/Security/Authentication/LdapAuthenticationProvider.php(90): FR3D\LdapBundle\Ldap\LdapManager->bind(Object(AppBundle\Entity\User), 'password') #3 ...

[2017-04-20 09:36:17] ldap_driver.DEBUG: ldap_search(dc=example,dc=com, (&(&(objectClass=person))(uid=einstein)), [array]) {"action":"ldap_search","base_dn":"dc=example,dc=com","filter":"(&(&(objectClass=person))(uid=einstein))","attributes":[]} []

[2017-04-20 09:36:17] security.INFO: User einstein found on LDAP {"action":"loadUserByUsername","username":"einstein","result":"found"} []

[2017-04-20 09:36:17] security.INFO: Authentication request failed. {"exception":"[object] (Symfony\Component\Security\Core\Exception\BadCredentialsException(code: 0): Bad credentials. at /vendor/symfony/symfony/src/Symfony/Component/Security/Core/Authentication/Provider/UserAuthenticationProvider.php:90, Symfony\Component\Security\Core\Exception\BadCredentialsException(code: 0): The presented password is invalid. at /vendor/symfony/symfony/src/Symfony/Component/Security/Core/Authentication/Provider/DaoAuthenticationProvider.php:67)"} []

나는 내가 잘못한 것을 알고 LDAP를 처음 사용하고 있습니다.

수정 Alvin이 게시 한 예제와 같이 코드를 변경했습니다. 하지만 다음 오류가 발생합니다 : Symfony Dev Log. 시스템에서 사용자를 찾았지만 로그 파일에 오류가 표시됩니다.

+0

명시 적으로 FR3D LDAP 번들을 사용 하시겠습니까? 아니면 사용 가능한 가능성/도구가있는 LDAP 서버에 대해 사용자를 인증하는 것이 목표입니까? 대답이 두 번째 옵션이라면 버전 2부터 Symfony가 LDAP를 지원한다는 것을 알아야합니다.8 외부 번들이 필요 없습니다. – cezar

+0

LDAP 서버에 대해서만 사용자를 인증하려고합니다. 번들을 발견하고 유용하다고 생각했습니다. – tablesuplex

+0

또한 내 기사에 따라 모든 작업을 수행했는지 다시 확인하십시오. 처음으로 기사를 작성했을 때 몇 가지 Symfony 프로젝트를 처음부터 만들어야한다고 생각합니다. 내 새 프로젝트의 경우 이제는 동일한 설정을 모두 복사합니다. 스키마를 업데이트하는 것을 잊지 마십시오. –

답변

0

마지막으로 내 코드에서 문제가 발견되었습니다.

사용자 엔터티의 DN 필드에 대한 설정 및 가져 오기 기능을 올바르게 설정하지 않았습니다. 그건 내 코드이었다

/** 
* Set Ldap Distinguished Name. 
* 
* @param string $dn Distinguished Name 
*/ 
public function setDn($dn) 
{ 
    // TODO: Implement setDn() method. 
} 

/** 
* Get Ldap Distinguished Name. 
* 
* @return null|string Distinguished Name 
*/ 
public function getDn() 
{ 
    // TODO: Implement getDn() method. 
} 

하지만 그 Alvins 튜토리얼에서 올바른 하나입니다

/** 
* {@inheritDoc} 
*/ 
public function setDn($dn) 
{ $this->dn = $dn; } 

/** 
* {@inheritDoc} 
*/ 
public function getDn() 
{ return $this->dn; } 

당신의 도움과 멋진 tutorial 당신에게 앨빈 감사드립니다.

0

당신은 너무처럼 기본 DN을 변경해야

user: 
    baseDn: dc=example,dc=com 

내가 그 그것을해야한다 생각합니다.

/** 
    * {@inheritDoc} 
    */ 
public function setDn($dn){ 
    $this->dn = $dn; 
} 

/** 
    * {@inheritDoc} 
    */ 
public function getDn(){ 
    return $this->dn; 
} 

참조 여기 내 튜토리얼 : -


편집 # 2 피드백

에 따라이 내 튜토리얼에 따라, FOSUser.php 법인이를 추가 할 수있는 솔루션이었습니다 https://alvinbunk.wordpress.com/2016/03/25/symfony-ad-integration/

+0

안녕하세요, 그것은 내가 전에 사용했던 baseDn입니다. 하지만이 구성으로 나는 사용자 euclid로만 로그인 할 수 있으며 다른 사용자는 로그인 할 수 없습니다. 그리고 그것은 내 문제입니다. – tablesuplex

+1

안녕 테이블입니다. 나는 당신의 설정이 나의 것보다 약간 다르다는 것을 안다. 테스트 LDAP 서버 인증은 작동하지만 이전에 해본 적이 있다는 것을 알고 있습니다. 나는 또한 현재 Active Directory 용으로 사용하고 있습니다. 내 설정과 당신의 차이점에 대한 내 블로그를 한번보세요 : https://alvinbunk.wordpress.com/2016/03/25/symfony-ad-integration/ –

+0

Alvin에게 훌륭한 튜토리얼을 주셔서 감사합니다.하지만 변경되었습니다. 당신과 같은 모든 파일이 있지만 다음과 같은 오류가 발생합니다 : [Dev Log] (https://www.dropbox.com/s/ctgftjyp7fjepkv/dev.log?dl=0) 유일한 것은 당신의 파일과 다릅니다. 사용자 엔티티의 이름입니다. – tablesuplex