2013-05-01 5 views
17

मैं कई पटरियों (v3.2) के लिए एक एकल साइन-ऑन समाधान लागू करने के लिए कोशिश कर रहा हूँ example.com के विभिन्न उप डोमेन पर होस्ट किए गए एप्लिकेशनसाझा सत्र भर में विभिन्न उप डोमेन पर क्षुधा रेल

एक ऐप एक पहचान के रूप में कार्य प्रदाता, auth के लिए devise का उपयोग करता है, और user.example.com पर बैठता है अन्य ऐप्स प्रमाणीकरण के लिए पहचान प्रदाता पर भरोसा करते हैं, [app1.example.com, app2.example.com, और उदाहरण के डोमेन के साथ, devise + omniauth का उपयोग करें) .com]। इस ब्लॉग एंट्री ने मेरे अधिकांश कार्यान्वयन को प्रेरित किया: http://blog.joshsoftware.com/2010/12/16/multiple-applications-with-devise-omniauth-and-single-sign-on/

मेरे पास यह ठीक काम कर रहा है, लेकिन समस्या यह है कि सत्र प्रदाता पर लॉग इन करने के बाद सत्र साझा नहीं किए जाते हैं, मुझे अभी भी प्रत्येक से कॉल करना है प्रमाणित करने के लिए अन्य ऐप्स का और मुझे उपयोगकर्ता के लिए यह असुरक्षित होने की आवश्यकता है।

मैंने secret_token.rb पर एक ही गुप्त टोकन का उपयोग करने का प्रयास किया, session_store.rb पर एक ही सत्र कुंजी और: domain =>: सभी (भी '.example.com' और 'example.com' को मान के रूप में प्रयोग किया)। अभी भी कोई भाग्य नहीं है।

उपरोक्त को देखते हुए, मैं एक सत्र में देखता हूं। पहचानें कि पहचान प्रदाता पर लॉगिन के बाद सत्र चर "warden.user.user.key" आबादी है। जब मैं तुरंत app1.example.com पर ऐप पर जाता हूं, session.inspect उसी session_id और _csrf_token को दिखाता है लेकिन "warden.user.user.key" चर अब गायब है।

मुझे लगता है कि मुझे कुछ मूर्खतापूर्ण याद आ रही है .. कोई विचार क्या हो सकता है?

+0

क्या आप इस पर एक प्रस्ताव प्राप्त करने में सक्षम थे? मैं वही चीज़ पूरी तरह से पूरा करने का प्रयास कर रहा हूं। – Jakcst

+0

क्या 'user.key' कुकीज़ में कहीं सेव किया गया है? शायद कुकी डोमेन * .example.com पर सेट नहीं है, और इसके बजाय users.example.com पर सेट है? (संपादित करें: समय से पहले सबमिट किए गए प्रविष्टि को मारना।) क्या सभी अलग-अलग ऐप्स सत्रों को सत्यापित करने के लिए 'users.example.com' पर हिट करते हैं? या फिर से लिखने के लिए, 'app1.example.com' सिस्टम की आपकी समझ के तहत, अपने सत्र को कैसे सत्यापित करता है? सत्र कहाँ संग्रहित हैं? साझा डीबी? – dbalatero

उत्तर

3

मुझे लगता है कि एक और एसओ उप डोमेन है कि तुम्हारा जवाब देने हैं भर में काम करने के लिए एक भी कुकी करने के बारे में सवाल ही नहीं है:

https://stackoverflow.com/a/10403338/2573896

इसके अलावा, मैं कल्पना कर सकते हैं दल्ली के साथ एक memcached क्लस्टर का उपयोग करने और के रूप में memcached कि आपके सत्र की दुकान के रूप में अच्छी तरह से काम करेगा:

http://awesomerails.wordpress.com/2011/08/23/rails-3-memcached-session-store/

अपने आवेदन के प्रयोजन के लिए, पहले समाधान हालांकि अधिक समझ में आता है।

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