2012-11-26 4 views
6

मैं oauth 1.0 (ट्विटर और फ़्लिकर) से निपट रहा हूं। वेबसाइट पोर्ट 80 पर काम करता है और OAuth सर्वर पोर्ट पर काम करता है 8080रैक को कैसे बल देना है: सत्र + sinatra कुकीज़ के बजाय पैरामीटर से "rack.session" पढ़ने के लिए

एल्गोरिथ्म: OAuth सर्वर से

  1. भेजने ajax अनुरोध जाँच करने के लिए करता है, तो उपयोगकर्ता ACCESS_TOKEN वैध
  2. खुला प्राधिकरण विंडो अगर उपयोगकर्ता कोई ACCESS_TOKEN या ACCESS_TOKEN है समय सीमा समाप्त हो जाता है
  3. बचाने OAuth सर्वर
0 करने के लिए
  • भेजने डेटा साझा करने OAuth सर्वर पर उपयोगकर्ता के सत्र में ACCESS_TOKEN

    यह सत्रों को स्टोर करने के लिए sinatra + rack: session + rack :: session :: sequel + sqlite का उपयोग करता है। यह प्रत्येक प्रतिक्रिया में Set-Cookie: rack.session=id भेजता है

    मैं 2 प्रकार के अनुरोध का उपयोग कर रहा हूं: jquery के साथ crossdomain AJAX और window.open के साथ सामान्य अनुरोध। मुझे crossdomain AJAX अनुरोध के लिए कुकीज़ पास करने में एक बड़ी सुरक्षा समस्या है।

    कोई फर्क नहीं पड़ता कि सर्वर की प्रतिक्रिया हेडर

    Access-Control-Allow-Headers: *

    क्रोमियम शामिल सुरक्षा त्रुटि फेंक देगा:

    Refused to set unsafe header "Cookie"

    मैं rack.session = आईडी डेटा पोस्ट और लोड करने के लिए पारित करके इस समस्या से बचने के लिए चाहते हैं :

    before "/twitter/connect.json" do 
        session = Rack::Session::something(params["rack.session"]) 
    end 
    

    लेकिन मुझे यह दस्तावेज नहीं मिल रहा है कि यह कैसे करें

  • +2

    मैं थोड़ा उलझन में हूं कि कौन सा सर्वर क्या कर रहा है। कौन सा सर्वर 'पहले' ब्लॉक चल रहा है? जब आप लिखते हैं "oauth सर्वर पर उपयोगकर्ता के सत्र में access_token सहेजें" क्या इसका मतलब डेटाबेस के माध्यम से सहेजना है? "यह sinatra + रैक का उपयोग करता है: सत्र ...", 'इसका मतलब वेबसाइट है? एक pedantic होने के लिए खेद है लेकिन स्पष्टता सवाल का जवाब देने में मदद मिलेगी। – iain

    उत्तर

    1

    Rack::Session::Abstract::ID में cookie_only नामक एक विकल्प है जो allows the session id to be passed in via the params है। हालांकि, यह defaults to true, और अधिकांश सत्र मिडलवेयर कार्यान्वयन don't bother to override it

    आपकी सबसे अच्छी शर्त शायद बंदर पैच Rack::Session::Abstract::ID डिफ़ॉल्ट रूप से cookie_only पर गलत है।

    Rack::Session::Abstract::ID::DEFAULT_OPTIONS.merge! :cookie_only => false 
    
    संबंधित मुद्दे