2010-09-24 19 views
5

का उपयोग कर एडीएएम के खिलाफ एलडीएपी का उपयोग करके प्रमाणीकरण मैं एक स्थानीय एडीएएम उदाहरण से बात करने के लिए वसंत-सुरक्षा का उपयोग कर जावा ऐप प्राप्त करने का प्रयास कर रहा हूं।वसंत सुरक्षा

मैं सफलतापूर्वक एडम और सेटअप स्थापित किया है इस प्रकार है ....

  • उदाहरण स्थानीय होस्ट पर चल रहा है: 389
  • रूट O=Company
    • है एक बच्चा OU=Company Users (orgnizationalUnit) कहा जाता
      • CN=Mike Q (उपयोगकर्ता)
      • नामक एक स्नातक 10 और password = welcome

तब मैं सेटअप वसंत-सुरक्षा (संस्करण 3.0.3, वसंत-ढांचा 3.0.4 और वसंत-ldap 1.3.0) है। स्प्रिंग फ़ाइल

<security:ldap-server id="contextSource" url="ldap://localhost:389/o=Company"/> 

    <security:authentication-manager> 
    <security:ldap-authentication-provider user-dn-pattern="uid={0},ou=Company Users"/> 
    </security:authentication-manager> 

    <bean class="com.xxx.test.TestAuthentication" lazy-init="false"/> 

और TestAuthentication

public class TestAuthentication 
{ 
    @Autowired 
    private AuthenticationManager authenticationManager; 

    public void initialise() 
    { 
     Authentication authentication = new UsernamePasswordAuthenticationToken("mike", "welcome"); 
     Authentication reponseAuthentication = authenticationManager.authenticate(authentication); 
    } 
} 

इस रनिंग मैं निम्न त्रुटि

Caused by: javax.naming.AuthenticationException: [LDAP: error code 49 - 8009030C: LdapErr: DSID-0C090336, comment: AcceptSecurityContext error, data 2030, vece] 
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3041) 
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2987) 
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2789) 
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2703) 
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:293) 
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175) 
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193) 
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:136) 
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:66) 
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667) 
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) 
at javax.naming.InitialContext.init(InitialContext.java:223) 
at javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:134) 
at org.springframework.ldap.core.support.LdapContextSource.getDirContextInstance(LdapContextSource.java:43) 
at org.springframework.ldap.core.support.AbstractContextSource.createContext(AbstractContextSource.java:254) 

किसी का कहना है सकता है जहां मैं गलत जा रहा हूँ मैं चाहता हूँ आभारी मिलता है। इस बिंदु पर मैं बस एलडीएपी का उपयोग कर एक दर्ज उपयोगकर्ता/पासवर्ड प्रमाणीकृत करना चाहता हूं, उससे कहीं अधिक जटिल नहीं।

मुझे कुछ सामान्य बिंदुओं में भी रूचि है क्योंकि यह एलडीएपी दुनिया में मेरा पहला प्रयास है।

  • क्या एलडीएपी केस संवेदनशील है?
  • क्या स्थान सबसे अच्छी तरह से बचाए गए हैं?
  • एलडीएपी क्वेरी में स्पष्ट पाठ में पासवर्ड भेजने से बचने के लिए सामान्य उपयोग-मामलों/सर्वोत्तम प्रथाओं क्या हैं?

उत्तर

4

ठीक है, इसलिए मैंने इसे उत्तर देने में काफी समय बिताया है।

त्रुटि कोड 2030 का अर्थ है कि उपयोगकर्ता का डीएन अमान्य है।

कुछ परीक्षण और त्रुटि के बाद यहां एक कॉन्फ़िगर है जो काम करता है और उपयोगकर्ता ठीक से खोज करता है। (आप शायद सुरक्षा नामस्थान का उपयोग करके इसे फिर से लिख सकते हैं लेकिन जब मैं इस पर काम कर रहा था तो कच्चे बीन परिभाषाओं का उपयोग करना स्पष्ट था)।

<bean id="contextSource" 
     class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"> 
    <constructor-arg value="ldap://localhost:389/cn=Sandbox,dc=ITOrg"/> 
    <property name="userDn" value="cn=superuser,cn=People,cn=Sandbox,dc=ITOrg"/> 
    <property name="password" value="xxxxxx"/> 
    </bean> 

    <bean id="ldapAuthProvider" 
     class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider"> 
    <constructor-arg> 
     <bean class="org.springframework.security.ldap.authentication.BindAuthenticator"> 
     <constructor-arg ref="contextSource"/> 
     <property name="userDnPatterns"> 
      <list> 
      <value>cn={0},cn=People</value> 
      </list> 
     </property> 
     </bean> 
    </constructor-arg> 
    </bean> 

    <bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch"> 
    <constructor-arg index="0" value="cn=People"/> 
    <constructor-arg index="1" value="(cn={0})"/> 
    <constructor-arg index="2" ref="contextSource"/> 
    </bean> 

महत्वपूर्ण बातें

<property name="userDn" value="cn=superuser,cn=People,cn=Sandbox,dc=ITOrg"/> 

जब संदर्भ स्रोत यह पूर्ण डीएन (होना चाहिए कि यह सिर्फ यह बुनियादी URL में सप्लाई कर संलग्न नहीं है में userDN को निर्दिष्ट (निर्माता आर्ग हैं)।

जब BindAuthentication

<value>cn={0},cn=People</value> 

यह मान का उपयोग कर संदर्भ स्रोत के BaseDN के शीर्ष पर एक प्रत्यय है।

जब एक UserSearch को विन्यस्त

<constructor-arg index="0" value="cn=People"/> 
    <constructor-arg index="1" value="(cn={0})"/> 

मैं इसे cn=People दूसरा आर्ग में किया जा रहा है, लेकिन इस अच्छा काम करने लगता है के साथ काम करने के लिए नहीं मिल सकता है। ध्यान दें कि आप उपयोगकर्ता के गुणों का उपयोग कर सकते हैं उदा। (uid={0})

और यहाँ सेम परिभाषाओं का उपयोग कुछ उदाहरण कोड है ...

@Autowired 
    private LdapUserSearch ldapUserSearch; 

    @Autowired 
    private AuthenticationProvider authenticationProvider; 

    public void initialise() 
    { 
     DirContextOperations dirContextOperations = ldapUserSearch.searchForUser("username"); 

     Authentication authentication = authenticationProvider.authenticate(new UsernamePasswordAuthenticationToken("username", "password"));  
    } 

कुछ अन्य यादृच्छिक titbits ...

Error 52b - Invalid password 


[LDAP: error code 32 - 0000208D: NameErr: DSID-031521D2, problem 2001 (NO_OBJECT), data 0, best match of: 'CN=Sandbox,DC=ITOrg' 
    - This means the user is not in the administrator role (probably) 

आशा यह सब किसी और मदद करता है।

0

मैंने उसी समस्या को ठीक किया है जिसे आप उसी बेस डीएन में व्यवस्थापकों की भूमिका के सदस्य के रूप में उपयोग करने का प्रयास कर रहे हैं। आशा है कि

में मदद करता है
संबंधित मुद्दे