2015-12-18 13 views
7

के साथ एलडीएपी प्रमाणीकरण मैं सिम्फनी 2.8 में नए LdapUserProvider का उपयोग करने की कोशिश कर रहा हूं। मेरा मानना ​​है कि मैंने सब कुछ per the docs कॉन्फ़िगर किया है।सिम्फनी 2.8

मेरा उपयोगकर्ता सफलतापूर्वक प्रमाणित कर सकता है, और फिर सुरक्षित पृष्ठ पर रीडायरेक्ट हो जाता है। पुनर्निर्देशन के बाद जहां समस्या शुरू होती है। सिम्फनी प्रमाणीकृत उपयोगकर्ता के रूप में बाध्य करने की कोशिश करता है, लेकिन एक शून्य पासवर्ड के साथ, जिसे खुले ldap द्वारा खारिज कर दिया जाता है।

यहां प्रासंगिक लॉग प्रविष्टियां और कॉन्फ़िगरेशन मान हैं।

कॉन्फ़िग:

services: 
    app.ldap: 
     class: Symfony\Component\Ldap\LdapClient 
     arguments: [ "localhost" ] 

सुरक्षा:

security: 
    firewalls: 
     restricted_area: 
      provider: app_users 
      form_login_ldap: 
       service: app.ldap 
       dn_string: "uid={username},DC=mydomain,DC=net" 
       check_path: login_check 
       login_path: login 
    providers: 
     app_users: 
      ldap: 
       service: app.ldap 
       base_dn: dc=mydomain,dc=net 
       search_dn: cn=Manager,DC=mydomain,DC=net 
       search_password: secretPassword 
       filter: "(&(aptAccountEnabled=1)(ObjectClass=aptAccount)(uid={username}))" 
       default_roles: ROLE_USER 

और लॉग फ़ाइल:

[2015-12-18 13:55:11] request.INFO: Matched route "login_check". {"route_parameters":{"_route":"login_check"},"request_uri":"http://ancdev.admin.aptalaska.net/~dmorphis/Portal/web/app_dev.php/Login/Verify"} [] 
[2015-12-18 13:55:11] security.DEBUG: Read existing security token from the session. {"key":"_security_restricted_area"} [] 
[2015-12-18 13:55:11] security.DEBUG: User was reloaded from a user provider. {"username":"dan.smartrg","provider":"Symfony\\Component\\Security\\Core\\User\\LdapUserProvider"} [] 
[2015-12-18 13:55:26] security.INFO: User has been authenticated successfully. {"username":"dan.smartrg"} [] 
<snip> 
[2015-12-18 13:55:26] security.DEBUG: Stored the security token in the session. {"key":"_security_restricted_area"} [] 
<snip> 
[2015-12-18 13:55:27] request.INFO: Matched route "home.index". {"route_parameters":{"_controller":"Apt\\PortalBundle\\Controller\\DefaultController::indexAction","_route":"home.index"},"request_uri":"http://ancdev.admin.aptalaska.net/~dmorphis/Portal/web/app_dev.php/"} [] 
[2015-12-18 13:55:28] security.DEBUG: Read existing security token from the session. {"key":"_security_restricted_area"} [] 
[2015-12-18 13:55:28] security.DEBUG: User was reloaded from a user provider. {"username":"dan.smartrg","provider":"Symfony\\Component\\Security\\Core\\User\\LdapUserProvider"} [] 
[2015-12-18 13:56:15] php.DEBUG: ldap_bind(): Unable to bind to server: Server is unwilling to perform {"type":2,"file":"/home/dmorphis/public_html/Portal/vendor/symfony/symfony/src/Symfony/Component/Ldap/LdapClient.php","line":73,"level":28928} [] 
[2015-12-18 13:56:15] app.ERROR: Bad credentials. [{"file":"/home/dmorphis/public_html/Portal/app/cache/dev/classes.php","line":2697,"function":"authenticate","class":"Symfony\\Component\\Security\\Core\\Authentication\\Provider\\UserAuthenticationProvide <truncated> 
[2015-12-18 13:56:15] security.INFO: An AuthenticationException was thrown; redirecting to authentication entry point. 
+0

दस्तावेज़ों में सिम्फनी \ घटक \ सुरक्षा \ Ldap \ Ldap का उपयोग करने के लिए कहा जाता है, लेकिन दस्तावेज़ गलत हैं। वास्तविक वर्ग सिम्फनी \ घटक \ Ldap \ LdapClient –

+1

है यह बहुत गंभीर लगता है। शायद इसके बारे में गिटहब पर एक मुद्दा खोलें? (इसमें रास्ता और दृश्यता है) –

उत्तर

0

सिम्फनी 3.1 में, LdapClient घटक को बहिष्कृत किया गया था। तो मैं समाधान अद्यतन करना चाहता था। इस समाधान को सिम्फनी 2.8/2.9 ऐप्स के लिए भी काम करना चाहिए।

#security.yml 
security: 
    firewalls: 
     restricted_area: 
      provider: app_users 
      form_login_ldap: 
       service: ldap.auth 
       dn_string: "%dn_string%" 

    providers: 
     app_users: 
      ldap: 
       service: ldap.auth 
       base_dn: "dc=domain,dc=net" 
       search_dn: "cn=Manager,DC=domain,DC=net" 
       search_password: secretPassword 
       filter: "(&(aptAccountEnabled=1)(ObjectClass=aptAccount)({uid_key}={username}))" 
       default_roles: ROLE_USER 
       uid_key: uid 

#services.yml 
services: 
    ldap.auth: 
     class: 'Symfony\Component\Ldap\Ldap' 
     factory: 
      - 'Symfony\Component\Ldap\Ldap' 
      - 'create' 
     arguments: 
      - 'ext_ldap' # adapter 
      - 
       host: database 
       options: 
        protocol_version: 3 
0

मैं लगभग एक ही समस्या वास्तव में था। ,

parent::setAuthenticated(count($roles) > 0); 

यह एक समस्या थी, क्योंकि मैं निदान, कि UsernamePasswordToken सत्र भंडारण से अप्रमाणित के साथ शुरू आ रहा था:

\Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::__construct में: तीव्र डिबगिंग के बाद, मैं लाइन के लिए आया था। डिफ़ॉल्ट सेवाओं के मेरे कस्टम ओवरराइडिंग के कारण यह कोई भूमिका निभाई गई थी।

आम तौर पर, एलडीएपी को लॉगिन पर केवल एक बार बुलाया जाएगा और सत्र में कोई पासवर्ड संग्रहीत नहीं किया जाना चाहिए। Serialized टोकन में केवल authenticated = true

क्या आप वाकई अनसुलझा प्रमाणित टोकन प्राप्त कर रहे हैं?

4

अंततः मुझे पता चला कि समस्या क्या थी।

आप श्रृंखला UserProvider करने के लिए है:

chain_provider: 
    chain: 
      providers: [in_memory, app_users] 
    in_memory: 
     memory: ~ 
    app_users: 
     ldap: 
      .....</i> 
+0

उपरोक्त प्रदाता लाइन जोड़ने से मुझे सिम्फनी 2.8 – Christian

+0

पर एक त्रुटि मिलती है, मार्कअप थोड़ा टूटा हुआ है, यहां: http://symfony.com/doc/2.8/security/multiple_user_providers.html – ahinze

1

मैं एक ही समस्या थी। मेरे मामले में यह framework.session.handler_id की गलत कॉन्फ़िगरेशन थी - मुझे इसे देशी फ़ाइल हैंडलर से शून्य में बदलना था जो डिफ़ॉल्ट PHP सत्र हैंडलर है।