29

मैं अपने डेस्कटॉप जावा एप्लिकेशन को सक्रिय निर्देशिका उपयोगकर्ताओं से संबंधित एकल हस्ताक्षर रखने के लिए चाहता हूं। दो चरणों में, मैं यह करना चाहता हूं:एकल-साइन-ऑन के लिए और लॉगिन जावा जावा अनुप्रयोग के लिए सक्रिय निर्देशिका प्रविष्टियों के लिए Windows लॉगिन का उपयोग कैसे करें?

  1. सुनिश्चित करें कि विशेष उपयोगकर्ता कुछ उपयोगकर्ता प्रविष्टि के साथ विंडोज में लॉग इन है।
  2. सक्रिय निर्देशिका

Java: Programatic Way to Determine Current Windows User के साथ से है कि उपयोगकर्ता के लिए कुछ सेटअप जानकारी की जाँच करें मैं वर्तमान Windows उपयोगकर्ता का नाम प्राप्त कर सकते हैं, लेकिन मुझे लगता है कि करने के लिए भरोसा कर सकते हैं? मुझे लगता है कि

System.getProperty("user.name") 

पर्याप्त सुरक्षित नहीं होगा? ("User.name" वातावरण चर से मिल गया प्रतीत हो रहा है, तो मैं उस पर भरोसा नहीं कर सकते, मुझे लगता है?)

प्रश्न Authenticating against Active Directory with Java on Linux मुझे दिए गए नाम के लिए प्रमाणीकरण प्रदान करता है + पारित लेकिन मैं प्रमाणित करने के लिए करना चाहते हैं विंडोज लॉगऑन के आधार पर?

सक्रिय निर्देशिका पहुंच के लिए, एलडीएपी शायद choise होगा?

मुझे पूरा यकीन नहीं है कि मैं सही प्रश्न पूछ रहा हूं लेकिन उम्मीद है कि किसी के पास मुझे आगे बढ़ाने के लिए कुछ विचार हैं।

उत्तर

13

यह समर्थित नहीं है। जावा 6 में सुधार है, लेकिन अभी तक पर्याप्त नहीं है।

जावा का अपना जीएसएस स्टैक है। समस्या एकल साइन-ऑन के लिए है, आपको ओएस से केर्बेरोज टिकट प्राप्त करने की आवश्यकता है (जावा स्टैक नहीं)। अन्यथा उपयोगकर्ता को दूसरी बार प्रमाणित करना होगा (एकल साइन-ऑन के उद्देश्य को हरा देना)।

http://java.sun.com/developer/technicalArticles/J2SE/security/ पर देखें। "मूल जीएसएस-एपीआई एक्सेस करें" के लिए देखो और यह एक नई सिस्टम प्रॉपर्टी sun.security.jgss.native के बारे में बात करता है, जो ओएस स्तर प्रमाणीकरण तक पहुंच प्रदान करते हुए जावा को अंतर्निहित ओएस जीएसएस कार्यान्वयन का उपयोग करने के लिए वास्तविक कारणों पर सेट करता है। बिल्कुल सही! .... इसके अलावा केवल सोलारिस और लिनक्स के लिए समर्थित है, माइक्रोसॉफ्ट विंडोज नहीं।

जावा 6 में सर्वर के रूप में कार्य करने के लिए पर्याप्त समर्थन होता है, आईई से एसपीएनईजीओ प्रमाणीकरण अनुरोध प्राप्त करते हैं और फिर उस उपयोगकर्ता को सक्रिय निर्देशिका के विरुद्ध प्रमाणित करते हैं। यह सिर्फ डेस्कटॉप क्लाइंट समर्थन है जो अभी भी अपूर्ण है।

+0

क्या कोई अन्य JVM वर्णित केर्बेरोज टिकट तक पहुंच प्रदान करता है? –

+1

ऐसा लगता है कि जावा 8 में वह समर्थन है, हालांकि। https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/jgss-features.html – Ramiro

0

http://jcifs.samba.org/

पर चेक jCifs उसके अलावा, एलडीएपी (वास्तव में, यह मेरी पहली कोशिश होना चाहिए, लेकिन ...)

0

आप JNA एपीआई (का उपयोग कर आप क्या करने की अनुमति देता है माना जाता है के साथ चिपके रहते हैं ऑपरेटिंग सिस्टम के लिए देशी कॉल आसान)?

आप Win32 मेटोड GetCurrentUser एमएसडीएन दस्तावेज़ http://msdn.microsoft.com/en-us/library/ms724432(VS.85).aspx पर कॉल कर सकते हैं। यह Advapi32.dll के अंदर स्थित है।

इसमें एक यूनिकोड संस्करण भी है, यदि आवश्यक हो तो GetCurrentUserW।

और आप सही हैं। ऐसा लगता है कि पर्यावरण चर बदल दिया जा सकता है, ताकि उपयोग करने के लिए भ्रामक हो।

मुझे 32/64 बिट विंडोज़ पर पार मंच प्रभाव के बारे में निश्चित नहीं है। यदि आपको कोड में समाधान की आवश्यकता है, तो मुझे यकीन है कि मैं इसके लिए कुछ लिख सकता हूं।

लेकिन हां, सिर्फ एक विचार :) एक LDAP LoginModule साथ

5

उपयोग JAAS। यह आपको अंतर्निहित जावा सुरक्षा आधारभूत संरचना में प्लग-इन करने की अनुमति देगा।

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

+0

धन्यवाद, क्या यह विंडोज लॉगिन द्वारा प्रमाणीकरण का समर्थन करता है? (ताकि जब उपयोगकर्ता विंडोज़ पर लॉग इन हो, तो उसे जावा एप्लिकेशन के लिए उपयोगकर्ता नाम और पासवर्ड दर्ज नहीं करना पड़ेगा) पहले मुझे यह नहीं मिला, अभी भी देखना जारी रखना है। – Touko

+0

हमम। मैंने देखा है कि एकमात्र मॉड्यूल जो वेबलॉगिक जैसे बड़े ढांचे का हिस्सा हैं ... या वेब क्लाइंट को क्रेडेंशियल्स पास करने के लिए जावा क्लाइंट के लिए डिज़ाइन हैं। आपको विश्वसनीय रूप से ऐसा करने के लिए देशी कॉल का उपयोग करके एक छोटा सा जैस प्रदाता लिखना पड़ सकता है। –

+2

एलडीएपी लॉगिन मॉड्यूल का उपयोग करने के बजाय, Krb5LoginModule पैरामीटर उपयोगTicketCache के साथ उपयोग किए जाने पर ओएस टिकट कैश (विंडोज लॉगऑन पर प्राप्त प्रमाण-पत्र) का उपयोग करने में सक्षम प्रतीत होता है। अभी भी कुछ समस्याएं प्रतीत होती हैं, लेकिन यह अब के लिए काम करता है .. – Touko

0

आपको Spring Security का उपयोग करके शायद अधिक लचीलापन मिलेगा। आप इसे जेएएएस और एलडीएपी प्रमाणीकरण दोनों के साथ उपयोग कर सकते हैं।

2
बस इस धागे को पढ़ने के अन्य लोगों के लाभ के लिए

, http://www.javaactivedirectory.com/?page_id=196 कैसे विंडोज़/सक्रिय निर्देशिका

+0

जेम्स शेक के समान विचार लेकिन स्पष्ट निर्देश हैं, धन्यवाद! एक बड़ी कमी अभी भी बनी हुई है, किसी को विंडोज रजिस्ट्री (allowtgtsessionkey रजिस्ट्री कुंजी) के साथ परेशानी होनी चाहिए जो सभी मामलों में संभव नहीं है (सेटअप के साथ परेशानी + सभी लोगों को रजिस्ट्री बदलना पसंद नहीं है) – Touko

+3

दुख की बात तोड़ दी गई है और आसानी से नहीं निर्धारणीय :-((-1) –

4

परियोजना Waffle विंडोज पर एसएसओ करने के लिए दोनों क्लाइंट और सर्वर-साइड कोड के साथ एकल प्रवेश करने के बारे में एक उदाहरण है। यह जेएनए आधारित है, कोई देशी पुस्तकालयों की आवश्यकता नहीं है।

+0

यह केवल विंडोज सर्वर और क्लाइंट के लिए काम करता है –

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