2017-04-03 15 views
10

मैं एक कस्टम लॉगिन क्षेत्र के साथ एक वाइल्डफ्लि 9.0.2 सर्वर पर एक वेब एप्लिकेशन चला रहा हूं (जिसे संगठनात्मक इकाइयों बी के लिए कई संगठनात्मक इकाइयों ए को दोबारा पूछताछ की आवश्यकता है जो संगठनात्मक से पूछे जाते हैं एक उपयोगकर्ता के लिए इकाइयों सी) कि इतने तरह standalone.xml में कॉन्फ़िगर किया गया है:उपयोगकर्ता के लिए एकाधिक ओयू से एलडीएपी भूमिकाओं को दोबारा पूछताछ करें

<security-realm name="LoginRealm"> 
    <authentication> 
     <ldap connection="EC2" base-dn="ou=users,dc=test,dc=de"> 
      <username-filter attribute="uid"/> 
     </ldap> 
    </authentication> 
</security-realm> 
... 
<security-domain name="other" cache-type="default"> 
    <authentication> 
     <login-module code="de.test.LoginModule" flag="required"> 
      <module-option name="principalDNPrefix" value="uid="/> 
      <module-option name="principalDNSuffix" value=",ou=users,dc=test,dc=de"/> 
      <module-option name="rolesCtxDN" value="ou=groups,dc=test,dc=de"/> 
      <module-option name="roleAttributeID" value="cn"/> 
      <module-option name="roleAttributeIsDN" value="false"/> 
      ... 

उपयोगकर्ता अपने उपयोगकर्ता नाम (टेस्टा जैसे), पासवर्ड (उदाहरण के लिए प्रदान करके वेबसाइट पर लॉग करता है जो कुछ भी) और से एक usergroup का चयन एक ड्रॉपडाउन मेनू (जैसे उपयोगकर्ता समूह)। फिर कस्टम लॉगिन मॉड्यूल (de.test.LoginModule.class) जो LdapLoginModule को विस्तारित करता है, स्टैंडअलोन xml से उपसर्ग ले कर प्रिंसिपल स्ट्रिंग का निर्माण करके और
के बाद प्रत्यय जोड़कर भूमिकाओं का एक लुकअप करता है। उपसर्ग: LoginModule द्वारा uid=
बिल्ड: testA,ou=UserGroupA
प्रत्यय: ,ou=users,dc=test,dc=de
में परिणामी: uid=testA,ou=UserGroupA,ou=users,dc=test,dc=de जो अभी पूरी तरह से काम करता है। ou=groups,dc=test,dc=de की भूमिकाएं पुनर्प्राप्त की गई हैं और वेब के अनुसार वेब.एक्सएमएल में परिभाषित सुरक्षा बाधाओं को निष्पादित किया गया है।

dc=test,dc=de 
|-- ou=applications 
| |-- ou=ProjectControlCenter 
| | |-- ou=permissions 
| | | |-- cn=group.Project Processor.manage 
| | | |-- cn=group.Project Processor.read 
| | | |-- cn=group.Project Monitorer.read 
| | | |-- ... 
| | |-- ou=resources 
| | | |-- cn=ProjectControlCenter.Applicaton 
| | | |-- cn=ProjectControlCenter.List 
| | | |-- cn=ProjectControlCenter.System 
| | | |-- ... 
|-- ou=groups 
| | |-- cn=Project Processor 
| | |-- cn=Project Monitorer 
| | |-- ... 
| |-- ou=users 
| | |-- ou=UserGroupA 
| | | |-- uid=testA 
| | | |-- uid=testB 
| | | |-- uid=testC 
| | |-- ou=UserGroupB 
| | |-- ... 

अब मैं ou=groups,dc=test,dc=de के रूप में न केवल भूमिकाओं क्वेरी करने के लिए की जरूरत है, लेकिन यह भी सभी:

<security-constraint> 
    <display-name>Test-Service</display-name> 
    <web-resource-collection> 
     <web-resource-name>Test</web-resource-name> 
     <url-pattern>/admin/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <description>Only Project Processors may see this</description> 
     <role-name>Project Processor</role-name> 
    </auth-constraint>  
</security-constraint> 

अब संगठनात्मक इकाई "ProjectControlCenter" LDAP वृक्ष संरचना है, जो की तरह लग रहा है तो में जोड़ा गया था ou=permissions,ou=ProjectControlCenter,ou=applications,dc=test,dc=de जहां असाइन की गई भूमिकाएं एक अद्वितीय सदस्य हैं और उपयोगकर्ता को जोड़ती हैं। इसके अलावा सभी ou=resources,ou=ProjectControlCenter,ou=applications,dc=test,dc=de प्राप्त करने के लिए एक और क्वेरी की आवश्यकता होगी जहां ou=permissions,ou=ProjectControlCenter,ou=applications,dc=test,dc=de उपयोगकर्ता के साथ-साथ इसे जोड़ने का एक अद्वितीय सदस्य भी है।

तो सवाल यह है: किसी भी तरह से रिकर्सिवली एक निश्चित उपयोगकर्ता के लिए सभी समूहों क्वेरी करने के लिए नहीं है, एलडीएपी विन्यास के माध्यम से उन समूहों और उन अनुमतियों के लिए संसाधनों के लिए अनुमतियाँ, या मैं LdapLoginModule.class की createLdapInitContext(String username, Object credential) विधि ओवरलोड करने की आवश्यकता है आवश्यक प्रश्नों को प्राप्त करने के लिए?

उत्तर

0

यह संभव है लेकिन केवल कुछ हद तक। आपका उपयोग मामला काफी जटिल लगता है और मैं व्यक्तिगत रूप से उस तरह के डिज़ाइन से बचूंगा। सुनिश्चित नहीं है कि आपने पहले से चेक किया है लेकिन आपके प्रश्न एक here से संबंधित प्रतीत होते हैं।

संबंधित मुद्दे