2014-04-10 5 views
5

मैं वर्तमान में NodeJS और restify साथ एक RESTful वेब सेवा के विकास कर रहा हूँ।बुनियादी प्रमाणीकरण और restify

मैं सब कुछ और नोड mysql डेटाबेस के लिए के साथ चल रहा है, लेकिन मैं भी HTTP मूल प्रमाणीकरण को लागू करना चाहते हैं।

मैं केवल अपाचे और एक .htaccess फ़ाइल के साथ एक बार ऐसा किया।

लेकिन यहाँ वेबसर्वर restify साथ आता है और मैं इसे इस तरह शुरू:

var server = restify.createServer({ 
    name: 'my webservice' 
}); 

restify प्रलेखन (http://mcavage.me/node-restify/#Bundled-Plugins) में सूचीबद्ध एक प्रमाणीकरण पार्सर प्लगइन नहीं है, लेकिन मैं समझ नहीं है कि यह कैसे उपयोग करने के लिए ।

req.username मान हमेशा अज्ञात पर सेट होता है, भले ही मैं http://user:[email protected] का उपयोग करता हूं।

सबसे अच्छी बात अगर मैं एक .htpasswd फ़ाइल के साथ इसका इस्तेमाल की दुकान/उपयोगकर्ता पहुँच सकते हैं और पारित करने के लिए कर सकता है किया जाएगा।

किसी को भी कैसे restify या किसी अन्य मॉड्यूल के साथ इस लागू करने के लिए पता है?

उत्तर

1

Passport.js पर एक नज़र डालें। यह प्रमाणीकरण योजनाओं में से एक के रूप में Basic HTTP का समर्थन करता है।

+0

आशाजनक लग रहा है ... मैं इसे – Nico

0

req.username मूल्य हमेशा गुमनाम के लिए सेट है, तब भी जब मैं का उपयोग http: // उपयोगकर्ता: पास @ यूआरएल ....

प्रलेखन जो बताते हैं कि यह उम्मीद लगती है यूआरएल में हेडर में क्रेडेंशियल नहीं हैं, आपको ऑर्डर करने वाले हेडर के साथ हेडर बनाने के लिए ब्राउज़र के अलावा कर्ल या कुछ अन्य टूल का उपयोग करने की आवश्यकता हो सकती है।

+0

ठीक करने का प्रयास करूंगा ... मैंने सोचा था कि जब भी मैं उन्हें यूआरएल में रखता हूं तब भी उन्हें हेडर में भेज दिया जाएगा। – Nico

+0

@ निको - मुझे लगता है कि एक ब्राउज़र में यह सुविधा हो सकती है, लेकिन आप सुनिश्चित नहीं हो सकते हैं। मैंने आपके द्वारा उपयोग में दिखाए गए यूआरएल प्रारूप को कभी नहीं देखा है। – Hogan

-3

व्यक्त आप कुछ इस तरह कर सकते हैं के साथ:

var auth = express.basicAuth(function(user, pass) { 
    return (user == "admin" && pass == "1234"); 
},'Super duper secret area'); 

app.get('/test', auth, function(req, res){ 
    ... 
}); 

expressjs.com

+0

मैं एक्सप्रेस का उपयोग नहीं करना चाहता।इसमें बहुत अधिक शामिल है कि मुझे इसकी आवश्यकता नहीं है ... यही कारण है कि मैंने restify.js – Nico

5

अंत में मैं किसी भी अतिरिक्त मॉड्यूल के बिना यह करने के लिए एक रास्ता मिल गया।

सबसे पहले मैं correkt हैडर भेजें:

var auth = req.headers['authorization']; 
res.statusCode = 401; 
res.setHeader('WWW-Authenticate', 'Basic realm="Secure Area"'); 
res.end('need creds'); 

तब मैं उपयोगकर्ता की जाँच करें और गुजरती हैं और अगर ठीक है तो सही स्थिति कोड

res.statusCode = 200; // OK 

भेजने पासवर्ड सही नहीं है:

res.statusCode = 401; // Force them to retry authentication 
    res.setHeader('WWW-Authenticate', 'Basic realm="Secure Area"'); 
    res.end('<html><body>You shall not pass</body></html>'); 

यह बहुत अच्छी तरह से काम करता है। मुझे केवल .htpasswd और क्रिप्ट पासवर्ड पढ़ने के लिए कुछ परेशानी है। क्या कोई जानता है कि मैं .htpasswd फ़ाइल के खिलाफ सादा पासवर्ड कैसे देख सकता हूं?

+0

चुना है क्या आपको लगता है कि यह मेरे मामले में भी काम कर सकता है: http://stackoverflow.com/questions/40287897/how-is-filled -रेक्वेस्ट-हेडर-प्रमाणीकरण? या मुझे अपना पुराना कोड बदलना चाहिए और केवल "विश्राम" एक्सटेंशन का उपयोग करना चाहिए? – Filippo1980

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