2015-12-14 12 views
11

का उपयोग कर मैं दो जावा webapps जो एक ही jboss सर्वर पर लेकिन एक अलग डोमेन चलाने webapp1 से webapp2 को एक जेएएएस लॉगिन मॉड्यूल का उपयोग करके सुरक्षित है। अब मैं एप 2 पर एक पेज पर जाने के लिए एप 1 के अंदर एक बटन बनाना चाहता हूं। भविष्यवाणी के अनुसार, मुझे app2 से लॉग इनस्क्रीन द्वारा प्रस्तुत किया गया है। मैं सफलतापूर्वक लॉगिन कर सकता हूँ।लॉग इन JAAS

हालांकि, दोनों वेबपैप्स पर उपयोगकर्ता वास्तव में वही हैं। इसका मतलब है कि ऐप 1 के लिए मान्य उपयोगकर्ता नाम/पासवर्ड ऐप 2 पर भी मान्य हैं। मैं अनावश्यक सुरक्षा जांच को बाईपास करने के लिए कुछ प्रोग्राम करना चाहता हूं। यदि ऐप 1 ऐप 2 से किसी पेज तक पहुंचना चाहता है, तो मैं किसी भी तरह j_username के साथ पास करना चाहता हूं और j2password app2 sothat app2 में तुरंत सुरक्षा जांच कर सकता है। अगर मुझे अतिरिक्त नियंत्रक या जेएसपी बनाना है और इस प्रक्रिया में रीडायरेक्ट का उपयोग करना है तो यह कोई समस्या नहीं है। मैं सीधे j_username और j_password कैसे पास कर सकता हूं ताकि लॉग इनस्क्रीन अब प्रदर्शित न हो, लेकिन सुरक्षा जांच अभी भी की जा रही है?

+0

के लिए विशेष कुकी JSESSIONIDSSO का उपयोग करेगा, आपके पास एक ही jboss के लिए अलग पोर्ट 1 और पोर्ट 2 कैसे हो सकता है? क्या यह एक जब्स इंस्टेंस और पोर्ट 1 == पोर्ट 2 है? – sibnick

+0

यह एक सर्वर (मशीन) है, जो एक jboss डोमेन सेटअप के साथ है। तो कई उदाहरण/सर्वर समूह हैं। दूसरे समूह में बंदरगाह ऑफसेट है। – user1884155

उत्तर

4

JAAS का उपयोग करके Single sign-on (SSO) को लागू करने के लिए आपको क्या चाहिए। Here आप एक ट्यूटोरियल ढूंढ सकते हैं जो LDAP का उपयोग लॉगिन मॉड्यूल के रूप में कर रहा है, लेकिन आपको यह विचार मिल जाएगा।

चूंकि आपके पास पहले से ही JAAS भाग पहले से कॉन्फ़िगर किया गया है, तो आपको page 3 से शुरू होने वाले वर्णित SSO भाग पर ध्यान केंद्रित करने की आवश्यकता होगी। असल में, विचार अन्य अनुप्रयोगों के साथ useSharedState=true का उपयोग कर राज्य साझा करने के लिए मॉड्यूल में से एक को कॉन्फ़िगर करना है।

में अपने LoginModule आप की तरह कुछ का उपयोग करेगा:, आप का उल्लेख किया है कि आप JBoss उपयोग कर रहे हैं, JBoss संस्करण 5.0 के बाद से अपने अन्य सवाल में जब से

public boolean login() throws LoginException{ 
    // ... 
    String username = null; 
    String password = null; 
    // check if useSharedState is true, if it is true, use the 
    // username/password from shared state. 
    if ("true".equalsIgnoreCase(option_.get("useShardState"))) { 
    username = (String)sharedStateMap_.get("javax.security.auth.login.name"); 
    password = (String)sharedStateMap_.get("javax.security.auth.login.password"); 
    } else { 
    // get the username and password from the CallbackHandler 
    Callback [] callbacks = {new NamePasswordCallback()}; 
    handler_.handle(callbacks); 
    username = callback.getUserId();     
    password = callback.getPassword(); 
    //save the username and password into the shared state 
    sharedStateMap.put("javax.security.auth.login.name",username); 
    sharedStateMap.put("javax.security.auth.login.password",password); 
    } 
    // ... communicates with data store to authenticate this user  
} 

, तो आप उपयोग कर सकते हैं:

<Valve className="org.apache.catalina.authenticator.SingleSignOn" debug="0"></Valve> 

यदि आप WebAuthentication कक्षा का उपयोग कर रहे हैं, तो यह आपके लिए स्वचालित रूप से SSO को संभालेगा।

+0

वेब प्रमाणीकरण वर्ग अब JBOSS 7 में उपलब्ध नहीं है। मुझे यकीन नहीं है कि इसे क्यों हटाया गया था। क्या उस वर्ग के लिए कोई विकल्प हैं? – user1884155

+0

उदाहरण के लिए आप लिंक करते हैं कि दोनों वेबपैप्स एक ही सर्वर इंस्टेंस पर चल रहे हैं। मैं वास्तव में डोमेन मोड में JBOSS का उपयोग कर रहा हूं, और मेरे पास एक ही भौतिक "सर्वर मशीन" पर दो सर्वर उदाहरण हैं। क्या कई संकेतों पर सिंगल साइन ऑन किया जा सकता है? – user1884155

+0

@ user1884155 हां 'एसएसओ 'भौतिक मशीनों में काम करता है। – dan

2

जेएएएस लॉगिन सुरक्षा डोमेन के लिए काम करता है, न कि वेबएप के लिए। तो आपको बस एक ही एप्लिकेशन को एक सुरक्षा डोमेन में रखना चाहिए।

<login-config> 
     <auth-method>FORM</auth-method> 
     <realm-name>ApplicationRealm</realm-name> 
     <form-login-config> ...............</form-login-config> 
    </login-config> 

यह एकल साइन-ऑन एक J2EE कंटेनर के अंदर के लिए पर्याप्त होना चाहिए: यह web.xml में login-config खंड है।

यह सीधे Java EE spec में निर्दिष्ट किया जाता:

EE.3.3.8.2 वेब एकल signon

...... आवश्यकता होती है प्रयोक्ताओं की फिर से प्रमाणीकरण केवल जब एक सुरक्षा नीति डोमेन सीमा कर दिया गया है पार ............

संपादित

कुछ खोज के बाद मैंने पाया कि एसएसओ डिफ़ॉल्ट रूप से अक्षम वाइल्डफ्लाई में-

<jboss-web> 
     <security-domain>sso</security-domain> 
      <valve> 
       <class-name>org.apache.catalina.authenticator.SingleSignOn</class-name> 
      </valve> 
    </jboss-web> 

इस Wildfly बाद

  1. संशोधित standalone.xml और जोड़ने <single-sign-on path="/"/><host> अंदर टैग
  2. जोड़े jboss-web.xml (अपनी सुरक्षा के डोमेन एसएसओ): Wildfly में SSO सक्षम करने के लिए एसएसओ

+0

इस समय, हमारे पास हमारे web.xml में एक वास्तविक नाम कॉन्फ़िगर नहीं है। यदि मैं वास्तविक नाम नहीं डालता तो डिफ़ॉल्ट मान क्या है? क्या आप कह रहे हैं कि यदि मैं दोनों वेबसाइटों को एक यादृच्छिक वास्तविक नाम देता हूं (उदाहरण के लिए: realmXYZ) मैं किसी भी प्रकार की गुप्त "एकल साइन ऑन" मोडस को सक्रिय कर दूंगा, बिना किसी और कॉन्फ़िगरेशन की आवश्यकता के? – user1884155

+0

यह "गुप्त" एकल साइन-ऑन नहीं है। मेरा संपादन देखें – sibnick

+0

मेरे दोनों वेबपैड एक ही सुरक्षा डोमेन का उपयोग करते हैं। यही है, मेरी जेबॉस डोमेन.एक्सएमएल फ़ाइल में मेरे पास एक सुरक्षितता-डोमेन "xyz" है, और प्रत्येक वेबैप की jboss-app.xml फ़ाइल में मैं उन्हें इस सुरक्षा डोमेन से लिंक करता हूं। मैंने कहीं भी एक वास्तविक नाम सेट नहीं किया है। दायरे के नाम और सुरक्षा डोमेन के बीच अंतर/पदानुक्रम क्या है? – user1884155

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