दिलचस्प पोस्ट
उसी MySQL तालिका में डुप्लिकेट / कॉपी रिकॉर्ड फ्रेमवर्क 3.5 में सर्वर टैग <% =%> के साथ दृश्यमान संपत्ति सेट करें यूआईएलबीएल आकार टोटफिट आटोलेआऊट आईओएस 6 के साथ काम नहीं करता है एक DIV के भीतर परिवर्तनों को सुनें और तदनुसार कार्य करें सुपर क्लास विधि और इंटरफ़ेस डिफ़ॉल्ट विधि संघर्ष समाधान सिंगल कोट्स बनाम डबल कोट्स सी या सी ++ में Minified जावास्क्रिप्ट प्रदर्शन में सुधार? टाइपस्क्रिप्ट में जाओ और सेट करें IPhone के लिए जीएमएपी में अक्षांश-देशांतर का उपयोग करके दो जगहों की दूरी की गणना करें IE 9 फ्लोट विथ ओवरफ्लो: छिपा हुआ और तालिका की चौड़ाई 100% ठीक से प्रदर्शित नहीं किया जा रहा है क्या यह देखने का एक तरीका है कि क्या WPF वर्तमान में डिजाइन मोड में क्रियान्वित कर रहा है या नहीं? आप jQuery में एक तत्व का चयन करें एक विशेष विकल्प कैसे चुनते हैं? क्यों नहीं जावा संग्रह सामान्य तरीके निकालें? सिंक्रनाइज़ेशन और सिस्टम। आउट.प्रिंटलाइन जैक्सन JSON मैपर के साथ जावा 8 java.time serialize / deserialize

लिनक्स पर जावा के साथ सक्रिय निर्देशिका के विरुद्ध प्रमाणन

जावा का उपयोग कर सक्रिय डायरेक्टरी के खिलाफ मुझे प्रमाणन करने का एक सरल कार्य है I बस क्रेडेंशियल्स की पुष्टि करना और कुछ और नहीं मान लें कि मेरा डोमेन "fun.xyz.tld" है, ओयू पथ अज्ञात है, और उपयोगकर्ता नाम / पासवर्ड testu / testp है।

मुझे पता है कि वहां कुछ जावा लाइब्रेरी हैं जो इस कार्य को आसान बनाते हैं, लेकिन मैं उन्हें लागू करने में सफल नहीं था। अधिकांश उदाहरण जो मैंने सामान्य रूप से एलडीएपी को संबोधित किया है, विशेष रूप से सक्रिय निर्देशिका नहीं है एलडीएपी अनुरोध जारी करने का अर्थ है उसमें एक ओयू पथ भेजने के लिए, जो मेरे पास नहीं है। इसके अलावा, एलडीएपी अनुरोध पेश करने वाला एप्लिकेशन पहले से ही सक्रिय निर्देशिका को बाध्य किया जाना चाहिए ताकि इसे एक्सेस किया जा सके … असुरक्षित, क्योंकि क्रेडेंशियल को किसी स्थान को खोजा जाने योग्य होना होगा। मुझे टेस्ट क्रेडेंशियल्स के साथ टेस्ट बाइंड करना होगा, यदि संभव हो तो – इसका मतलब होगा कि यह खाता मान्य है।

अंतिम, यदि संभव हो, तो क्या इस तरह के प्रमाणीकरण तंत्र एन्क्रिप्ट किए जाने का कोई तरीका है? मुझे पता है कि एडी कर्बेरॉस का उपयोग करता है, लेकिन निश्चित नहीं है कि जावा के एलडीएपी तरीकों का क्या मतलब है

क्या किसी के पास काम कोड का उदाहरण है? धन्यवाद।

Solutions Collecting From Web of "लिनक्स पर जावा के साथ सक्रिय निर्देशिका के विरुद्ध प्रमाणन"

वहाँ 3 प्रमाणीकरण प्रोटोकॉल हैं जो लिनक्स या किसी अन्य प्लेटफॉर्म पर जावा और सक्रिय निर्देशिका के बीच प्रमाणीकरण करने के लिए इस्तेमाल किया जा सकता है (और ये केवल HTTP सेवाओं के लिए विशिष्ट नहीं हैं):

  1. केर्बोस – केर्बोस सिंगल साइन-ऑन (एसएसओ) और प्रतिनिधिमंडल प्रदान करता है लेकिन वेब सर्वर को आईएसए के माध्यम से एसएसओ को स्वीकार करने के लिए एसपीएनईजीओ समर्थन की आवश्यकता होती है।

  2. NTLM – एनटीएलएम आईएसए (और अन्य ब्राउज़रों के जरिए एसएसओ का समर्थन करता है यदि वे ठीक से कॉन्फ़िगर किए गए हों)

  3. एलडीएपी – एक खाता नाम और पासवर्ड को बस सत्यापित करने के लिए एक एलडीएपी बाइंड का इस्तेमाल किया जा सकता है।

"एडीएफएस" नामक कुछ भी है जो SAML का उपयोग करने वाली वेबसाइटों के लिए एसएसओ प्रदान करता है जो कि विंडोज एसएसपी में कॉल करता है, इसलिए प्रथा में यह मूल रूप से दूसरे उपर्युक्त प्रोटोकॉल में से एक का उपयोग करने का राउंडअबाउट तरीका है।

प्रत्येक प्रोटोकॉल के पास इसका लाभ होता है, लेकिन अंगूठे के नियम के रूप में, अधिकतम संगतता के लिए आपको आम तौर पर "ऐसा करता है जैसे Windows करता है" तो विंडोज क्या करता है?

सबसे पहले, दो विंडोज़ मशीनों के बीच प्रमाणीकरण केर्बोस का समर्थन करता है क्योंकि सर्वर को डीसी से संपर्क करने की आवश्यकता नहीं होती है और क्लाइंट्स केबीरस टिकट कैश कर सकते हैं जो डीसी पर लोड कम कर देता है (और क्योंकि कर्बेरियो प्रतिनिधिमंडल का समर्थन करता है)।

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

क्रेडेंशियल्स मान्य करने के लिए एक एलडीएपी बाइंड का इस्तेमाल करना कुशल नहीं है और SSL की आवश्यकता है लेकिन जब तक हाल ही में केर्बोस और एनटीएलएम लागू करना मुश्किल हो गया है, तो मेडी-पारी प्रमाणीकरण सेवा के रूप में एलडीएपी का उपयोग करना जारी है। लेकिन इस समय यह आम तौर पर से बचा जाना चाहिए। एलडीएपी सूचना की एक निर्देशिका है और एक प्रमाणीकरण सेवा नहीं है। इसका उद्देश्य उद्देश्य के लिए उपयोग करें

तो आप जावा में और विशेष रूप से वेब अनुप्रयोगों के संदर्भ में कैसे करबरोस या NTLM को लागू करते हैं?

क्वेस्ट सॉफ़्टवेयर जैसी कई बड़ी कंपनियां हैं और उन केन्द्रों में ऐसे समाधान हैं जो विशेष रूप से जावा का उल्लेख करते हैं मैं वास्तव में इन पर टिप्पणी नहीं कर सकता क्योंकि वे कंपनी-व्यापी "पहचान प्रबंधन समाधान" हैं, इसलिए उनकी वेबसाइट पर मार्केटिंग स्पिन को देखने से, यह स्पष्ट करना मुश्किल है कि प्रोटोकॉल किस प्रकार उपयोग किए जा रहे हैं और कैसे। विवरण के लिए आपको उनसे संपर्क करना होगा।

जावा में Kerberos लागू करना बहुत मुश्किल नहीं है क्योंकि मानक जावा लाइब्रेरीज org.ietf.gssapi कक्षाओं के माध्यम से केर्बोस का समर्थन करते हैं। हालांकि, जब तक हाल ही में एक बड़ी बाधा नहीं हुई है – आईई कच्चे केर्बोस टोकन नहीं भेजता है, यह एसपीएनईजीओ टोकन भेजता है। लेकिन जावा 6 के साथ, एसपीएनईजीओ लागू किया गया है। सिद्धांत में आपको कुछ GSSAPI कोड लिखने में सक्षम होना चाहिए जो IE ग्राहकों को प्रमाणित कर सकते हैं। लेकिन मैंने इसे कोशिश नहीं की है केर्बोस के सूर्य क्रियान्वयन वर्षों में त्रुटियों की कॉमेडी रहा है, इसलिए इस क्षेत्र में सूर्य के ट्रैक रिकॉर्ड पर आधारित मैं अपने स्नोगो कार्यान्वयन के बारे में कोई वादे नहीं करता जब तक कि आपके हाथ में वह पक्षी न हो।

NTLM के लिए, एक नि: शुल्क ओएसएसएस प्रोजेक्ट है जिसे जेसीआईएफएस कहा गया है जिसमें NTLM HTTP प्रमाणीकरण सर्वलेट फ़िल्टर है। हालांकि यह एक एसएमबी सर्वर के साथ क्रेडेंशियल मान्य करने के लिए एक मैन-इन-द-मध्य विधि का उपयोग करता है जो NTLMv2 (जो धीरे-धीरे एक आवश्यक डोमेन सुरक्षा नीति बन रहा है) के साथ काम नहीं करता है। इस कारण और अन्य लोगों के लिए, जेसीआईएफएस का एचटीटीपी फ़िल्टर हिस्सा हटाया जाना निर्धारित है। ध्यान दें कि स्पिन-ऑफ की संख्या है जो उसी तकनीक को लागू करने के लिए जेसीआईएफएस का इस्तेमाल करती हैं। इसलिए यदि आप एनटीएलएम एसएसओ का समर्थन करने का दावा करने वाले अन्य परियोजनाएं देखते हैं, तो ठीक प्रिंट की जांच करें।

सक्रिय निर्देशिका के साथ एनटीएलएम क्रेडेंशियल्स को मान्य करने का एकमात्र सही तरीका नेटलॉगऑन सोलॉगऑन डीसीईआरपीसी कॉल को सुरक्षित चैनल के साथ नेटलोगॉन पर उपयोग कर रहा है। क्या ऐसी चीज़ जावा में मौजूद है? हाँ। यह रहा:

http://www.ioplex.com/jespa.html

जेस्पा एक 100% जावा NTLM कार्यान्वयन है जो NTLMv2, NTLMv1, पूर्ण अखंडता और गोपनीयता विकल्प और पूर्ववर्ती नेटलोगॉन क्रेडेंशियल सत्यापन का समर्थन करता है। और इसमें कस्टम एसटीओ फ़िल्टर, एक जेएएएस लॉगइन मॉड्यूल, एचटीटीपी क्लाइंट, एसएएसएल क्लाइंट और सर्वर (जेएनडीआई बाइंडिंग के साथ), कस्टम एनटीएलएम सेवाएं बनाने के लिए जेनेरिक "सुरक्षा प्रदाता" और अधिक शामिल हैं।

माइक

यहां इस कोड को मैं इस ब्लॉग से उदाहरण के आधार पर रखा है: LINK और यह स्रोत: LINK

import com.sun.jndi.ldap.LdapCtxFactory; import java.util.ArrayList; import java.util.Hashtable; import java.util.List; import java.util.Iterator; import javax.naming.Context; import javax.naming.AuthenticationException; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import static javax.naming.directory.SearchControls.SUBTREE_SCOPE; //import org.acegisecurity.AuthenticationException; import org.acegisecurity.BadCredentialsException; import org.acegisecurity.GrantedAuthority; import org.acegisecurity.GrantedAuthorityImpl; import org.acegisecurity.providers.AuthenticationProvider; import org.acegisecurity.providers.UsernamePasswordAuthenticationToken; import org.acegisecurity.providers.dao.AbstractUserDetailsAuthenticationProvider; import org.acegisecurity.userdetails.UserDetails; import org.acegisecurity.userdetails.UserDetailsService; import org.acegisecurity.userdetails.UsernameNotFoundException; class App2 { public static void main(String[] args) { if (args.length != 4 && args.length != 2) { System.out.println("Purpose: authenticate user against Active Directory and list group membership."); System.out.println("Usage: App2 <username> <password> <domain> <server>"); System.out.println("Short usage: App2 <username> <password>"); System.out.println("(short usage assumes 'xyz.tld' as domain and 'abc' as server)"); System.exit(1); } String domainName; String serverName; if (args.length == 4) { domainName = args[2]; serverName = args[3]; } else { domainName = "xyz.tld"; serverName = "abc"; } String username = args[0]; String password = args[1]; System.out .println("Authenticating " + username + "@" + domainName + " through " + serverName + "." + domainName); // bind by using the specified username/password Hashtable props = new Hashtable(); String principalName = username + "@" + domainName; props.put(Context.SECURITY_PRINCIPAL, principalName); props.put(Context.SECURITY_CREDENTIALS, password); DirContext context; try { context = LdapCtxFactory.getLdapCtxInstance("ldap://" + serverName + "." + domainName + '/', props); System.out.println("Authentication succeeded!"); // locate this user's record SearchControls controls = new SearchControls(); controls.setSearchScope(SUBTREE_SCOPE); NamingEnumeration<SearchResult> renum = context.search(toDC(domainName), "(& (userPrincipalName=" + principalName + ")(objectClass=user))", controls); if (!renum.hasMore()) { System.out.println("Cannot locate user information for " + username); System.exit(1); } SearchResult result = renum.next(); List<GrantedAuthority> groups = new ArrayList<GrantedAuthority>(); Attribute memberOf = result.getAttributes().get("memberOf"); if (memberOf != null) {// null if this user belongs to no group at all for (int i = 0; i < memberOf.size(); i++) { Attributes atts = context.getAttributes(memberOf.get(i).toString(), new String[] { "CN" }); Attribute att = atts.get("CN"); groups.add(new GrantedAuthorityImpl(att.get().toString())); } } context.close(); System.out.println(); System.out.println("User belongs to: "); Iterator ig = groups.iterator(); while (ig.hasNext()) { System.out.println(" " + ig.next().toString()); } } catch (AuthenticationException a) { System.out.println("Authentication failed: " + a); System.exit(1); } catch (NamingException e) { System.out.println("Failed to bind to LDAP / get account information: " + e); System.exit(1); } } private static String toDC(String domainName) { StringBuilder buf = new StringBuilder(); for (String token : domainName.split("\\.")) { if (token.length() == 0) continue; // defensive check if (buf.length() > 0) buf.append(","); buf.append("DC=").append(token); } return buf.toString(); } } 

मैंने एडी और जावा का उपयोग करने वाला एक प्रोजेक्ट समाप्त किया हम स्प्रिंग ldapTemplate का इस्तेमाल करते हैं

एडी एलडीएपी के अनुरूप है (लगभग), मुझे नहीं लगता कि आपके पास आपके पास के कार्य के साथ कोई समस्या है। मेरा मतलब यह है कि यह एडी या किसी अन्य एलडीएपी सर्वर से कोई फर्क नहीं पड़ता है अगर आप कनेक्ट करना चाहते हैं।

मैं एक नज़र रखूंगा : स्प्रिंग एलडीएपी

उनके पास उदाहरण भी हैं

एन्क्रिप्शन के लिए, हमने SSL कनेक्शन का इस्तेमाल किया (इसलिए यह एलडीएपीएस था) एडी को एसएसएल पोर्ट / प्रोटोकॉल पर कॉन्फ़िगर करना था

लेकिन सबसे पहले, सुनिश्चित करें कि आप एलडीएपी आईडीई के माध्यम से अपने विज्ञापन से ठीक से कनेक्ट कर सकते हैं। मैं अपाचे निर्देशिका स्टूडियो का उपयोग करता हूं, यह वास्तव में अच्छा है, और यह जावा में लिखा है यही सब कुछ मैं चाहता हूं परीक्षण प्रयोजनों के लिए आप अपाचे निर्देशिका सर्वर भी स्थापित कर सकते हैं

क्या आप अभी क्रेडेंशियल्स की पुष्टि कर रहे हैं? उस स्थिति में आप केवल सादे कर्बोर्स कर सकते हैं और एलडीएपी के साथ परेशान नहीं कर सकते।

Ioplex और दूसरों के रूप में कहा है, वहाँ कई विकल्प हैं एलडीएपी (और नोवेल एलडीएपी एपीआई) का इस्तेमाल करने के लिए प्रमाणित करने के लिए, मैंने कुछ ऐसा प्रयोग किया है:

 LDAPConnection connection = new LDAPConnection( new LDAPJSSEStartTLSFactory() ); connection.connect(hostname, port); connection.startTLS(); connection.bind(LDAPConnection.LDAP_V3, username+"@"+domain, password.getBytes()); 

एक "विशेष सुविधा" के रूप में, सक्रिय निर्देशिका खाते के विशिष्ट नाम का उपयोग किए बिना "उपयोगकर्ता @ डोमेन" के खिलाफ एलडीएपी बाइंड करता है कनेक्शन पर TLS एन्क्रिप्शन को सक्षम करने के लिए यह कोड StartTLS का उपयोग करता है; दूसरा विकल्प एलडीएपी पर SSL है, जो मेरे एडी सर्वरों द्वारा समर्थित नहीं है।

असली चाल सर्वर और मेजबान का पता लगाने में है; आधिकारिक तरीके से उम्मीदवार मेजबानों की एक बंडल का पता लगाने के लिए DNS SRV (सेवा) रिकॉर्ड लुकअप का उपयोग करना है, फिर सही सर्वर का पता लगाने के लिए एक यूडीपी आधारित LDAP "ping" (किसी विशेष माइक्रोसॉफ्ट फॉर्मेट में) करें अगर आप रुचि रखते हैं, तो मैंने उस क्षेत्र में रोमांच और खोज की मेरी यात्रा के बारे में कुछ ब्लॉग लेख पोस्ट किए हैं।

यदि आप करबरोस-आधारित उपयोगकर्ता नाम / पासवर्ड प्रमाणीकरण करना चाहते हैं, तो आप मछली की एक अन्य केतली में देख रहे हैं; यह जावा GSS-API कोड के साथ संभव है, हालांकि मुझे यकीन नहीं है कि यह प्रमाणीकरण को मान्य करने के लिए अंतिम चरण का प्रदर्शन करता है। (सत्यापन करने वाला कोड उपयोगकर्ता के नाम और पासवर्ड की जांच करने के लिए एडी सर्वर से संपर्क कर सकता है, जिसके परिणामस्वरूप उपयोगकर्ता के लिए टिकट देने वाला टिकट मिलता है, लेकिन यह सुनिश्चित करने के लिए कि एडी सर्वर का प्रतिरूपण नहीं किया जा रहा है, यह भी टिकट के लिए खुद के लिए उपयोगकर्ता, जो कुछ अधिक जटिल है।)

यदि आप कर्बरोस-आधारित एकल साइन-ऑन करना चाहते हैं, मान लें कि आपके उपयोगकर्ता डोमेन के लिए प्रमाणीकृत हैं, तो आप जावा GSS-API कोड के साथ भी ऐसा कर सकते हैं। मैं एक कोड नमूना पोस्ट करूंगा, लेकिन मुझे अब भी अपने घृणित प्रोटोटाइप को मानवीय आंखों के लिए फिट करने की आवश्यकता है। कुछ प्रेरणा के लिए SpringSource से कुछ कोड देखें

यदि आप एनटीएलएम की तलाश कर रहे हैं (जो मुझे समझने के लिए दिया गया था वह कम सुरक्षित है) या कुछ और, ठीक है, शुभकामनाएँ

यदि आप सभी करना चाहते हैं, तो एडी के विरुद्ध करबरोस का प्रमाणिकरण किया जाता है, तो एक सरल http://spnego.sourceforge.net/HelloKDC.java प्रोग्राम इसे करना चाहिए।

प्रोजेक्ट के "प्री-फ़्लाईट" दस्तावेज पर एक नज़र डालें जो HelloKDC.java प्रोग्राम के बारे में चर्चा करता है।

http://java.sun.com/docs/books/tutorial/jndi/ldap/auth_mechs.html

एसएएसएल तंत्र कर्बोरोस v4 और v5 का समर्थन करता है। http://java.sun.com/docs/books/tutorial/jndi/ldap/sasl.html

SSL के बिना एलडीएपी प्रमाणीकरण सुरक्षित नहीं है और कोई भी उपयोगकर्ता क्रेडेंशियल देख सकता है क्योंकि एलडीएपी क्लाइंट ट्रांसपोर्ट यूजरमेन और पासवर्ड ldap बाइंड ऑपरेशन के दौरान इसलिए हमेशा ldaps प्रोटोकॉल का उपयोग करें। स्रोत: उदाहरण के साथ जावा स्प्रिंग सुरक्षा में एलडीएपी प्रमाणीकरण सक्रिय निर्देशिका

मैं आपको सुझाता हूँ कि आप oVirt प्रोजेक्ट के एडीब्रोकर पैकेज को देख सकें । यह एलडीएपी सर्वर (एक्टिव डायरेक्ट्री, आईपीए, आरडीएस, टिवोली-डीएस) के खिलाफ केर्बोस के उपयोग के प्रमाणन के लिए स्प्रिंग-एलडीएपी और Krb5 JAAS लॉगिन मॉड्यूल (GSSAPI के साथ) का उपयोग करता है। इंजन \ बैकेंड \ प्रबंधक \ मॉड्यूल \ ब्लाल \ src \ main \ java \ org \ ovirt \ engine \ core \ bll \ adbroker पर कोड देखें

आप रिपॉजिटरी क्लोन करने के लिए git का उपयोग कर सकते हैं या गेरिट लिंक का उपयोग कर ब्राउज़ कर सकते हैं