2011-12-07 11 views
7

मैं चाहूँगा पता है कि कैसे इन दोनों प्रमाणीकरण चरणों गठबंधन करने के लिए:JAAS अतिरिक्त LoginModules

  1. जांच एक LDAP में उपयोगकर्ता/कूटशब्द
  2. प्रिंसिपलों (भूमिकाओं) विषय के लिए एक DB में पाया जोड़ें।

एलडीएपी उपयोगकर्ता भंडार को एप्लिकेशन-विशिष्ट भूमिकाओं के बारे में कोई जानकारी नहीं है और मैं आवेदन डीबी में पासवर्ड प्रबंधित नहीं करना चाहता हूं। तो मुझे दोनों की जरूरत है।

JAAS विन्यास फाइल अतिरिक्त LoginModules की अनुमति देता है:

<name used by application to refer to this entry> { 
    <LoginModule> <flag> <LoginModule options>; 
    <optional additional LoginModules, flags and options>; 
}; 

लेकिन मैं उदाहरण है कि बताते हैं कि कैसे मैं काम करता है नहीं मिल रहा।

क्या यह अच्छी विधि है?

धन्यवाद

=========================================

दरअसल हम अतिरिक्त LoginModules हो सकता है:

यहाँ मेरी जवाब है। JAAS विन्यास फाइल है:

सूर्य की LdapLoginModule कि उपयोगकर्ता/पासवर्ड, और मेरा sample.module.SampleLoginModule कि मेरे db क्वेरी और प्रिंसिपलों भरता है की जाँच करता है:

Sample { 
    com.sun.security.auth.module.LdapLoginModule Requisite 
    userProvider="ldap://acme.org:389/OU=Users,OU=_ACME,DC=acmegis,DC=acme,DC=org" 
    authIdentity="{USERNAME}" 
    userFilter="(userPrincipalName={USERNAME})" 
    storePass=true 

    sample.module.SampleLoginModule required debug=true; 
}; 

यहाँ हम दो LoginModules है। महत्वपूर्ण पैरामीटर storePass = true है जो मॉड्यूल के साझा स्थिति में उपयोगकर्ता नाम और पासवर्ड संग्रहीत करने के लिए LdapLoginModule से पूछता है। (http://docs.oracle.com/javase/6/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/LdapLoginModule.html देखें)।

तो अगला लॉगिन मॉड्यूल उपयोगकर्ता नाम को साझास्टेट मानचित्र तर्क में प्रारंभिक विधि में पास कर सकता है। उनके पास लॉगिन() में कुछ भी नहीं होना चाहिए और प्रिंसिपल्स को भरने के लिए डीबी में पूछताछ प्रतिबद्ध() (जैसे शिमी बांदीएल ने कहा) में किया है।

मैं अभी तक इसका उपयोग नहीं करता हूं लेकिन JBoss द्वारा विकसित डेटाबेस डेटाबेस सर्वर (मॉड्यूल http://community.jboss.org/wiki/DatabaseServerLoginModule देखें) जो प्रमाणीकरण और भूमिका मैपिंग का समर्थन करता है। पासवर्ड-स्टैकिंग = useFirstPass के साथ प्रयुक्त किसी भी लाइन-कोड (लेकिन एक सुंदर JAAS कॉन्फ़िगरेशन फ़ाइल) लिखने के बिना हमें अपनी ज़रूरत का उत्तर होना चाहिए।

बीआर।

उत्तर

1

आप एक LoginModulelogin विधि में आप LDAP का उपयोग जो लागू करने और उपयोगकर्ता नाम/पासवर्ड की जाँच करें और commit विधि में आप डीबी पहुँच सकते हैं और प्रिंसिपलों भरना चाहिए।
एकाधिक LoginModule

+0

आपके उत्तर के लिए धन्यवाद। लेकिन "com.sun.security.auth.module.LdapLoginModule" पहले ही एलडीएपी के माध्यम से उपयोगकर्ता/पासवर्ड के लिए जांचता है, मैं इसे फिर से लिखना नहीं चाहता हूं। मेरे उत्तर पर एक नज़र डालें और एक टिप्पणी दें (यदि आप चाहते हैं)। बी.आर. – kiki

0

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

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