2015-05-27 36 views
6

में सक्रिय निर्देशिका प्रमाणीकरण के साथ जेडब्ल्यूटी का उपयोग करना मैं एक इंट्रानेट वेब एप्लिकेशन बना रहा हूं जिसमें एक कोणीय फ्रंटएंड और नोड.जेएस बैकएंड शामिल है। प्रमाणीकरण और प्रमाणीकरण के लिए एप्लिकेशन को कॉर्पोरेट सक्रिय निर्देशिका का उपयोग करने की आवश्यकता है।NodeJS बैकएंड

मैं इस बात पर विचार कर रहा हूं कि इसे सुरक्षित तरीके से कैसे कार्यान्वित किया जाए। मैं Active Directory node module वास्तव में ई के साथ संवाद स्थापित करने के लिए प्रमाणित करने के लिए जब उपयोगकर्ता में लॉग आदि

उपयोग करने के लिए, और कुछ प्रतिबंधित कार्यों के लिए सुरक्षा समूह सदस्यता की जाँच करने, हालांकि योजना बना रहा हूँ, मैं काफी यकीन है कि सबसे अच्छा तरीका है क्या नहीं कर रहा हूँ मेरे बैकएंड एंडपॉइंट्स को अधिकृत करने के लिए। एडी मॉड्यूल किसी भी टोकन/टिकट की पेशकश नहीं करता है, भले ही मुझे लगता है कि वास्तविक प्रमाणीकरण प्रक्रिया के लिए केर्बेरोज का उपयोग किया जाता है। मेरे द्वारा विकसित किए गए अन्य प्रमाणीकृत ऐप्स में मैंने उपयोगकर्ता द्वारा लॉग इन करते समय एक jsonwebtoken उत्पन्न किया है, और उसके बाद प्रत्येक बैकएंड रूट में टोकन पास कर दिया है और सत्यापित किया है, क्या यह अच्छा विचार है कि एडी के खिलाफ प्रमाणीकरण करते समय भी?

संपादित करें: प्रश्न का दूसरा हिस्सा अलग थ्रेड के लिए पैदा की: Best practices for server-side handling of JWT tokens

इसके अलावा, मैं एक अधिक सामान्य चिंता का विषय है, के बारे में क्या सबसे अच्छा अभ्यास वास्तव में टोकन पुष्टि करने के लिए है। मान लीजिए कि जेडब्ल्यूटी पीढ़ी के लिए इस्तेमाल किया गया "गुप्त" समझौता किया गया है (मेरे परिदृश्य में कई लोगों को सिस्टम के स्रोत कोड तक पहुंच हो सकती है, लेकिन सिस्टम के लिए नहीं)। क्या मैं यह मानने में सही हूं कि एक दुर्भावनापूर्ण उपयोगकर्ता, केवल इस जानकारी के साथ, किसी भी दिए गए उपयोगकर्ता की तरफ से टोकन उत्पन्न कर सकता है, और कभी भी एडी के उपयोग से प्रमाणीकरण किए बिना मेरे एपीआई अनुरोधों में टोकन का उपयोग करता है? एक टोकन आम तौर पर jwt.sign(payload, secretOrPrivateKey, options) का उपयोग करके उत्पन्न होता है। वैकल्पिक रूप से, मान लीजिए कि एक दुर्भावनापूर्ण उपयोगकर्ता वास्तविक टोकन (इसे समाप्त होने से पहले) पकड़ सकता है। मेरे लिए ऐसा लगता है कि उपयोगकर्ता के उपयोगकर्ता नाम और पासवर्ड को जानने के बजाय, सुरक्षा अब उपयोगकर्ता नाम और जेडब्ल्यूटी गुप्त को जानने के लिए कम हो गई है। क्या यह एक वैध चिंता है और इसे रोकने के लिए मुझे क्या करना चाहिए?

मेरी सबसे अच्छी उम्मीद अब तक सर्वर के साइड सत्र का उपयोग कर रहा है ताकि लॉग इन करने के बाद वर्तमान उपयोगकर्ता के बारे में जानकारी संग्रहीत हो सके, ताकि बैकएंड एंडपॉइंट्स तक पहुंचने पर एक टोकन दुर्भावनापूर्ण रूप से जेनरेट और उपयोग किया जा सके, यह तब तक असफल हो जाएगा जब तक कि उपयोगकर्ता वास्तव में नहीं है लॉगिन मार्ग से गुजर गया, एडी के साथ प्रमाणित और इस के परिणामस्वरूप सत्र में कुछ जानकारी संग्रहीत की गई।

मैं भी वास्तव में में ई प्रत्येक एपीआई अंत बिंदु को प्रमाणित करने पर विचार किया, लेकिन वह ई उपयोगकर्ता नाम/पासवर्ड की आवश्यकता होगी हर अनुरोध है, जो बारी में संवेदनशील जानकारी की आवश्यकता होगी होता में भेजे जाने के लिए ग्राहक की में संग्रहीत करने के लिए sessionstorage या localstorage, जो सबसे बुरा विचार है।

तो, सवाल:

1) यह वाहक निशानी के रूप में जेडब्ल्यूटी के साथ ई प्राधिकरण गठबंधन करने के लिए उचित है या क्या एक सुरक्षित बैकएंड + दृश्यपटल प्रमाणीकरण के लिए ई का उपयोग निर्माण करने के लिए पसंदीदा तरीका है?

2) यदि जेडब्ल्यूटी एक अच्छा विचार है, तो जेडब्ल्यूटी का उपयोग करके एंडपॉइंट्स को सुरक्षित करने के लिए सबसे अच्छा अभ्यास क्या है? सर्वर साइड सत्र का उपयोग कर उचित है?

कैसे सबसे अच्छा टोकन आधारित प्रमाणीकरण को लागू करने पर उदाहरण के दिलचस्प बात यह मैं पाया है टन (सामान्य रूप में, या विशेष रूप से NodeJS साथ), लेकिन उनमें से कई एक ही रास्ता या किसी अन्य रूप में त्रुटिपूर्ण लगते।

+0

क्या आप प्रश्न 2 पर स्पष्टीकरण या विस्तार कर सकते हैं? क्या आप सर्वर और बैकएंड सेवाओं के बीच कॉमर्स सुरक्षित करना चाहते हैं, या प्रत्येक अनुरोध में जेडब्ल्यूटी को पास किए बिना सुरक्षित क्लाइंट-सर्वर कॉम के लिए साधन हैं? – frasertweedale

+0

न तो मुझे लगता है, मेरा मतलब है कि जेडब्ल्यूटी टोकन को सुरक्षित तरीके से कैसे सत्यापित किया जाना चाहिए और सर्वर रहस्यों को कैसे प्रबंधित किया जाना चाहिए, इस बारे में सामान्य सर्वोत्तम प्रथाओं का मतलब है। मुझे इसे एक अलग प्रश्न में फेंकने दें: http://stackoverflow.com/questions/30523238/best-practices-for-server-side-handling-of-jwt-tokens – JHH

+0

स्पष्टीकरण के लिए धन्यवाद। मैं अपना जवाब अपडेट करूंगा। – frasertweedale

उत्तर

2

1) यह उचित टोकन वाहक के रूप में जेडब्ल्यूटी के साथ ई प्राधिकरण गठबंधन या करने के लिए है कि क्या एक सुरक्षित बैकएंड + दृश्यपटल प्रमाणीकरण के लिए ई का उपयोग निर्माण करने के लिए पसंदीदा तरीका है?

यह उचित है, लेकिन अगर आप पहले से ही करबरोस और ई का उपयोग कर रहे शुरू में उपयोगकर्ता को प्रमाणित करने के लिए, आप s4u2proxyविवश प्रतिनिधिमंडल जो सेवा KDC के उपयोगकर्ताओं की सेवा के टिकट प्रस्तुत करते हैं और प्राप्त करने के लिए अनुमति देता है उपयोग करने पर विचार हो सकता है (प्राधिकरण जांच के अधीन) बैकएंड सेवा के लिए टिकट (और कई सेवाओं के लिए दोहराना आवश्यक है)।

आप एक बहुत बैकेंड सेवाओं की आवश्यकता है कि संपर्क करने के लिए है, तो एक भी जेडब्ल्यूटी असर सभी प्रमाणीकरण प्राधिकरण नीति को लागू करने के लिए सभी सेवाओं के लिए की जरूरत का दावा है एक बेहतर विकल्प हो सकता है।

2) यदि जेडब्ल्यूटी एक अच्छा विचार है, तो जेडब्ल्यूटी का उपयोग करके एंडपॉइंट्स को सुरक्षित करने के लिए सबसे अच्छा अभ्यास क्या है? सर्वर साइड सत्र का उपयोग कर उचित है?

जनरल कुंजी सुरक्षा प्रथाओं लागू होते हैं:

  • कभी दुकान कुंजी गैर वाष्पशील भंडारण में स्पष्ट में, कहीं भी।
  • आदर्श रूप से सर्वर पर संलग्न स्टोरेज में एन्क्रिप्टेड कुंजी स्टोर न करें, जहां सर्वर से समझौता किया गया है, तो वे ऑफ़लाइन हमले के अधीन होंगे। उन्हें सर्वर स्टार्टअप पर होस्ट में उपलब्ध कराएं।
  • सुनिश्चित करें कि कुंजी सामग्री सुरक्षित मेमोरी में रहती है ताकि इसे डिस्क पर बदला जा सके (और/या एन्क्रिप्टेड स्वैप का उपयोग करें)।
  • सार्वजनिक कुंजी एल्गोरिदम का उपयोग करें ताकि एकाधिक होस्ट पर कोई गुप्त कुंजी मौजूद न हो।
  • hardware security module (एचएसएम) का उपयोग करने पर विचार करें।
+0

जानकारी के लिए धन्यवाद। मेरे पास केवल एक बैकएंड एपीआई सेवा है जिसे एडी/केर्बेरोस प्रमाणीकरण से प्राप्त टोकन-आधारित तंत्र से सुरक्षित करने की आवश्यकता है। मैं शायद जेडब्ल्यूटी का उपयोग कर चिपक जाऊंगा। – JHH