मैं यहां एक प्रश्न लिख रहा हूं क्योंकि मैं महीनों के लिए स्वयं समाधान नहीं ढूंढ पाया। मेरी स्थिति: मेरे पास जावा पर लिखे गए क्लाइंट-सर्वर एप्लिकेशन हैं जो Java2ee 6 और EJB3.0 का उपयोग करते हैं। सर्वर पक्ष ग्लासफ़िश 3.0 पर तैनात किया गया है। मुझे आवेदन के लिए लॉगिन मॉड्यूल को विकसित/कार्यान्वित करने की आवश्यकता है। प्रमाणीकरण ldap सर्वर का उपयोग करके किया जाना चाहिए और प्रमाणीकरण आवेदन के अंदर संभाला जाएगा। इसलिए मैं प्रमाणीकरण और प्रमाणीकरण मिश्रण करने के लिए जेएएएस प्रौद्योगिकी को किराए पर लेना चाहता हूं। मैं इसे उदाहरण के लिए कर रहा हूं जैसे here। फिर मैं लॉगिन करने के लिए this tutorial और official documentation का पालन करता हूं। मेरी समस्या यह है कि ldap लॉगिन काम नहीं करता है।जावाईई में जेएएएस कॉन्फ़िगरेशन और एलडीएपी लॉगिन मॉड्यूल 6
मेरे कोड:
LoginContext lc = null;
try {
CallbackHandler handler = new CallbackHandler() {
public void handle(Callback[] callbacks) throws UnsupportedCallbackException {
for(int i = 0; i < callbacks.length; i++) {
if(callbacks[i] instanceof NameCallback) {
// prompt the user for a username
NameCallback nc = (NameCallback)callbacks[i];
nc.setName("admin");
System.out.println("Login done.");
} else if(callbacks[i] instanceof PasswordCallback) {
// prompt the user for sensitive information
PasswordCallback pc = (PasswordCallback)callbacks[i];
pc.setPassword("mypassword".toCharArray());
System.out.println("Password done.");
} else {
throw new UnsupportedCallbackException(callbacks[i], "Unrecognized Callback");
} //end if/else
} //end for()
}
};
lc = new LoginContext("myAuth", handler);
lc.login();
Subject subject = lc.getSubject();
} catch (LoginException e) {
e.printStackTrace();
}
मेरे JAAS विन्यास फाइल:
myAuth {
com.sun.enterprise.security.auth.login.LDAPLoginModule REQUIRED
userProvider="ldap://mydomain:389/OU=users,DC=my,DC=domain,DC=com"
authIdentity="{USERNAME}"
useSSL=false
debug=true;
};
आवेदन की ग्राहक भाग निम्नलिखित JVM विकल्पों के साथ चलाया जाता है:
-Djava.security.auth.login.config=./jaas.conf -Dorg.omg.CORBA.ORBInitialHost=localhost
glassfish साइट पर मैंने जेवीएम गुण
सेट किया-Djava.security.auth.login.config=${com.sun.aas.instanceRoot}/config/login.conf
-Djava.naming.referral=follow
glassfish तरफ login.conf फ़ाइल निम्न रेखाएं हों, ADRealm के लिए
ADRealm {
com.sun.enterprise.security.auth.login.LDAPLoginModule REQUIRED;
};
सेटिंग्स (ADRealm मेरी glassfish के डिफ़ॉल्ट दायरे है):
<property name="jaas-context" value="ldapRealm" />
<property name="base-dn" value="CN=users,DC=my,DC=domain,DC=com" />
<property name="directory" value="ldap://mydomain:3268" />
<property name="search-bind-password" value="mypassword" />
<property name="search-bind-dn" value="[email protected]" />
मैं तनाव करना चाहते हैं आपका ध्यान है कि मैं कम से कम यह सुनिश्चित करने के लिए ldap लॉगिन करने की कोशिश कर रहा हूं कि यह काम करता है।
जब मैं ग्राहक मैं निम्नलिखित त्रुटि मिलती है चलाएँ: (!)
Mar 1, 2013 1:36:44 PM com.sun.appserv.security.AppservPasswordLoginModule extractCredentials
SEVERE: passwordlm.nopwdcred
javax.security.auth.login.LoginException: No credentials.
क्या अजीब बात है कि एक बार काम किया है, यानि कि मैं subject
lc.getSubject()
विधि से प्राप्त कर सकते हैं। इसके अलावा मुझे लगता है कि handle()
विधि ऊपर लागू नहीं किया गया है के बाद से मैं उत्पादन में
Login done.
Password done.
नहीं दिख रहा।
कृपया कोई मेरी मदद कर सकता है ???
[इस उत्कृष्ट जवाब] पर एक अच्छा नजर डालें (जेएएएस प्रमाणीकरण को समझने के लिए http://stackoverflow.com/questions/2206911/best-way-for-user- प्रमाणीकरण-on-javaee-6-using-jsf-2-0/2207147#2207147)। – skuntsel
यहां देखें: http://docs.oracle.com/javase/6/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/LdapLoginModule.html: "authIdentity = auth_id यह विकल्प एलडीएपी निर्देशिका में उपयोगकर्ता को प्रमाणीकृत करते समय उपयोग करने के लिए पहचान निर्दिष्ट करता है ... ध्यान दें कि यदि इस विकल्प में एक विशिष्ट नाम नहीं है तो उपयोगकर्ताफिल्टर विकल्प भी निर्दिष्ट किया जाना चाहिए। " क्या आपने उपयोगकर्ताफिल्टर विकल्प जोड़ने का प्रयास किया था? – Dikla