2013-02-25 133 views
6

मैं इस समय एक बहु-प्लेटफ़ॉर्म एप्लिकेशन डिज़ाइन कर रहा हूं (क्लाइंट आंतरिक रूप से विकसित मोबाइल ऐप्स और प्रारंभ में एक AJAX भारी जावास्क्रिप्ट क्लाइंट शामिल करेगा) एक आरईएसटी एपीआई के आसपास केंद्रित है। चूंकि भविष्य में एपीआई तीसरे पक्ष के लिए खुला हो सकता है, मैं एपीआई के साथ प्रमाणीकरण और प्रमाणीकरण के लिए ओएथ 2.0 का उपयोग कर रहा हूं।जावास्क्रिप्ट क्लाइंट को OAuth टोकन को संवाद करने का सुरक्षित तरीका

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

  1. उपयोगकर्ता के लॉग और जो सर्वर साइड जमा हो जाती है टोकन ताज़ा:

    कदम रूप से कदम में कहें। यह एक HTTP-केवल लॉगिन सत्र कुकी सेट करता है।

  2. लॉगिन के बाद जावास्क्रिप्ट क्लाइंट कोड उपयोगकर्ता के ब्राउज़र पर भेजा जाता है।
  3. जावास्क्रिप्ट क्लाइंट एक संसाधन के लिए अनुरोध करता है जो टोकन को पुनर्प्राप्त करने के लिए अपने स्वयं के एप्लिकेशन (आरईएसटी एपीआई का हिस्सा नहीं) का हिस्सा है। सत्र कुकी सुनिश्चित करता है कि ग्राहक वास्तविक है, और रेफरर भी चेक किया जाएगा। ऑथ टोकन वापस कर दिया गया है।
  4. जावास्क्रिप्ट क्लाइंट आरईएसटी एपीआई के साथ टोकन को मान्य करता है।
  5. क्लाइंट अब आरईएसटी एपीआई के खिलाफ अनुरोध समाप्त होने तक अनुरोध करने के लिए टोकन का उपयोग कर सकता है।
  6. यदि ऑथ टोकन समाप्त हो जाता है या पृष्ठ बंद हो जाता है और फिर से खोला जाता है, तो जावास्क्रिप्ट क्लाइंट एक नए टोकन का अनुरोध कर सकता है। वेबपैप का सर्वर पक्ष टोकन को रीफ्रेश करने का ख्याल रखता है और जब तक कि लॉगिन सत्र कुकी अभी भी वैध है, तब तक नया टोकन भेजता है।

क्या यह समझ में आता है, या यह सिस्टम में भारी छेद छोड़ देगा? विशेष रूप से, क्या यह वेब पर संसाधन रखने के लिए पागल है जो एक कुकी सेट के आधार पर प्रमाणीकरण टोकन को सौंपता है?

उत्तर

5

बस यह सुनिश्चित करें कि ब्राउज़र में कोई भी संचार HTTPS है, ताकि बीच में कोई भी आपके टोकन चुरा सकता है। और अपनी ऑथ कुकीज़ पर "सुरक्षित" ध्वज सेट करें।

  • अधिकांश ब्राउज़र प्राधिकरण योजनाएं आजकल कुकी में पारित सत्र टोकन तक उबालती हैं। ओथ 2 योजना आगे कुछ कदम है क्योंकि ए) टोकन (हो सकता है) बेवकूफ टोकन के अंदर कोई खतरनाक उपयोगकर्ता जानकारी नहीं है, और बी) वे समाप्त हो जाते हैं।

  • (बस आधार पर वह टिप्पणी डालने के लिए:।! एक बार मैं एक साइट से एक सत्र टोकन खुला पॉप और मेरे घर का पता और फोन नंबर की खोज की वहाँ में था Ack)

  • मैंने देखा है कोड जो एचएमएसी ब्रोवर जावास्क्रिप्ट के अंदर अनुरोधों पर हस्ताक्षर करता है, लेकिन यह एक विशाल अस्वीकरण के साथ आया: उत्पादन में इसका उपयोग न करें। एक हस्ताक्षर योजना के लिए क्लाइंट (जावास्क्रिप्ट) को "गुप्त" स्ट्रिंग जानने की आवश्यकता होती है, लेकिन ब्राउज़र/जावास्क्रिप्ट इतनी असुरक्षित है कि यह आपके गुप्त तारों को दुनिया में सौंपने की मात्रा है।

लेकिन अगर आप HTTPS पर अपने सभी commuinication रखने के लिए, तो आप वास्तव में सिर्फ एक OAuth मोड़ कुकीज़ के रूप में सत्र टोकन गुजर के परिचित योजना पर डाल रहे हैं।

+0

मैं सबकुछ ठीक से एसएसएल का उपयोग करने की योजना बना रहा था, मुझे उल्लेख करना चाहिए था। – randomhuman

+0

मैं इस उत्तर से सहमत हूं और इस दृष्टिकोण को लागू करने पर विचार कर रहा हूं, लेकिन उल्लेख करने के लिए एक और दृष्टिकोण है। आप जावास्क्रिप्ट से "निहित" अनुदान का उपयोग कर सकते हैं, फिर सत्र कुकी बनाने के लिए अपने वेब ऐप पर कॉल करने के लिए एक्सेस टोकन का उपयोग करें। उस बिंदु से, सत्र कुकी (जो सर्वर-साइड पर एक्सेस टोकन से जुड़ा हुआ है) का उपयोग वेब ऐप के खिलाफ करने के लिए किया जाएगा और एक्सेस टोकन का उपयोग आरईएसटी एपीआई के खिलाफ किया जाएगा। हालांकि, आप यहां रीफ्रेश टोकन को कैसे प्रबंधित करते हैं (इसे स्थानीय स्टोरेज में स्टोर करें जहां उपलब्ध हो, शायद?)। –

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

  • कोई संबंधित समस्या नहीं^_^