2016-09-30 6 views
6

मेरे पास वर्तमान में एक सर्वर है जो कि शिरो टोकन सिस्टम के साथ टॉमकैट सर्वलेट में स्प्रिंग चला रहा है, यह जांचने के लिए कि कोई उपयोगकर्ता पहले से लॉग इन है या नहीं। यह क्रॉस-डोमेन अनुरोधों की अनुमति देता है।node.js से क्रेडेंशियल्स के साथ रिवर्स प्रॉक्सी लॉगिन

किसी अन्य डोमेन क्लाइंट पर मैं यह कर सकते हैं में कॉल (आम तौर पर कोणीय उपयोग करते हुए) ...

http.get('https://<my_check_login_service>', {withCredentials: true})

... और जब तक मैं पहले से लॉग इन कर रहा हूँ (टोकन की समय सीमा समाप्त नहीं करता है) उपयोगकर्ता जानकारी (नाम, अवतार, आदि) वापस करें।

मैं उपयोगकर्ता प्राप्त करने के लिए किसी अन्य प्रणाली अब है कि एक नोड सर्वर जिसके लिए मैं नोड सर्वर कॉल करना चाहते हैं (यह भी क्लाइंट साइड के लिए कोणीय ऊपर की सेवा) है और यह ऊपर my_check_login_service के लिए खत्म हो प्रॉक्सी है, सत्र ऑब्जेक्ट (एक्सप्रेस का उपयोग करके) पर जानकारी सेट करें, और फिर उपयोगकर्ता को क्लाइंट पर वापस कर दें। लेकिन, सत्र ऑब्जेक्ट के माध्यम से, मुझे अपने कनेक्शन पर भरोसा करने की अनुमति देता है और लॉगिन सेवा से लौटाए गए उपयोगकर्ता के सुरक्षा स्तर के आधार पर उन्हें और एपीआई कॉल करने की अनुमति देता है।

Node.js रूटर मैं प्रॉक्सी यह कर सकते हैं ...

app.get('/checklogin', function(req, res) { 
    req.pipe(request.get("https://<my_check_login_service>").pipe(res); 
} 

... लेकिन मैं कैसे सेवा के लिए उचित क्रेडेंशियल्स पारित करने के लिए पता नहीं है। अगर मैं ऐसा ...

http.get('checkLogin', {withCredentials: true})

... यह, ज़ाहिर है, क्योंकि मेरे login_service के लिए क्रेडेंशियल स्थानीय सर्वर के लिए भेजा नहीं कर रहे हैं काम नहीं करता। इस काम को करने के लिए मैं सही प्रमाण-पत्र कैसे पास कर सकता हूं?

चीयर्स।

उत्तर

2

साख, HTTP हेडर में सबसे अधिक होने की संभावना है मूल अनुरोध के पते के साथ, (दोनों से अनुरोध और प्रतिक्रिया करने के लिए) सभी हेडर गुजर, यह काम करना चाहिए:

app.get('/checklogin', function(req, res) { 
    console.dir(req.headers) 
    //You can inspect the headers here and pass only required values 
    const options = { 
    url: 'https://<my_check_login_service>', 
    headers: Object.assign(
     //Tell the login service about address of original request 
     {'X-Forwarded-For': req.connection.remoteAddress} 
     req.headers) 
    } 
    req.pipe(request.get(options)) 
    .on('response', (response) => res.set(response.headers)) 
    .pipe(res) 
} 

इस उदाहरण द्वारा मूल पते से गुजरता है सेटिंग X-Forwarded-For, login_service कॉन्फ़िगरेशन के आधार पर इसे पहचान सकता है ... या नहीं।

+0

हाँ! धन्यवाद! मैं पूरी तरह से * सुनिश्चित नहीं हूं कि यह काम करेगा क्योंकि अब मुझे एहसास हुआ है कि मुझे इसे मेरे लिए काम करने के लिए शायद वाइल्डकार्ड प्रमाण पत्र की आवश्यकता है। लेकिन इस परिवर्तन के साथ अब मुझे "त्रुटि: होस्टनाम/आईपी प्रमाण पत्र के altnames से मेल नहीं खाता है: ..." मुझे लगता है कि वाइल्डकार्ड प्रमाण इस दाएं को ठीक करेगा। जब मैं उस वर्ग को दूर कर दूंगा तो इसे अपडेट कर दूंगा। – crowmagnumb

+0

'login_service' क्लाइंट आईपी पता भी जांचता है, इसलिए प्रॉक्सी इसे पास करनी चाहिए। मैं इसे – DarkKnight

+0

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

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