OAuth टोकन उत्पन्न करने के आसपास की सर्वोत्तम प्रथाएँ?


100

मुझे एहसास है कि OAuth कल्पना ConsumerKey, ConsumerSecret, AccessToken, RequestToken, TokenSecret, या Verifier कोड की उत्पत्ति के बारे में कुछ भी निर्दिष्ट नहीं करता है, लेकिन अगर कोई सुरक्षित टोकन (विशेष रूप से टोकन) बनाने के लिए कोई सर्वोत्तम प्रथा है तो मैं उत्सुक हूं। गुप्त संयोजन)।

जैसा कि मैंने देखा, टोकन बनाने के लिए कुछ दृष्टिकोण हैं:

  1. बस यादृच्छिक बाइट्स का उपयोग करें, उपभोक्ता / उपयोगकर्ता के साथ जुड़े डीबी में स्टोर करें
  2. कुछ उपयोगकर्ता / उपभोक्ता-विशिष्ट डेटा, उपभोक्ता / उपयोगकर्ता से जुड़े DB में स्टोर करें
  3. उपयोगकर्ता / उपभोक्ता-विशिष्ट डेटा एन्क्रिप्ट करें

(1) के लिए लाभ हैं डेटाबेस जानकारी का एकमात्र स्रोत है जो सबसे सुरक्षित लगता है। (2) या (3) की तुलना में हमला करना कठिन होगा।

वास्तविक डेटा को नष्ट करना (2) संभवतः पहले से ही ज्ञात डेटा से टोकन को फिर से बनाने की अनुमति देगा। वास्तव में (1) को कोई लाभ प्रदान नहीं किया जा सकता है क्योंकि वैसे भी स्टोर / लुकअप करने की आवश्यकता होगी। (1) की तुलना में अधिक सीपीयू गहन।

वास्तविक डेटा को एन्क्रिप्ट करना (3) जानकारी को डिक्रिप्ट करने की अनुमति देगा। इसके लिए (1) और (2) की तुलना में कम संग्रहण और संभावित रूप से कम लुकअप की आवश्यकता होगी, लेकिन संभवतः कम सुरक्षित भी।

क्या कोई अन्य दृष्टिकोण / फायदे / नुकसान हैं जिन पर विचार किया जाना चाहिए?

संपादित करें: एक और विचार यह है कि टोकन में किसी प्रकार का यादृच्छिक मूल्य होना चाहिए क्योंकि नए टोकन को समाप्त करने और फिर से जारी करने की क्षमता मौजूद होनी चाहिए, इसलिए इसमें केवल वास्तविक डेटा शामिल नहीं होना चाहिए।

सवालों का पालन करें :

क्या क्रिप्टोग्राफ़िक रूप से सुरक्षित बनाने के लिए न्यूनतम टोकन लंबाई है? जैसा कि मैं इसे समझता हूं, लंबे समय तक टोकन रहस्य अधिक सुरक्षित हस्ताक्षर बनाएगा। क्या यह समझ सही है?

क्या हैशिंग दृष्टिकोण से किसी विशेष एन्कोडिंग का उपयोग करने के फायदे हैं? उदाहरण के लिए, मैं हेक्स एनकोडिंग्स (उदाहरण GUID स्ट्रिंग्स) का उपयोग करके बहुत सारे एपीआई देखता हूं। OAuth हस्ताक्षर एल्गोरिथ्म में, टोकन को एक स्ट्रिंग के रूप में उपयोग किया जाता है। हेक्स स्ट्रिंग के साथ, बेस 64 एनकोडिंग के साथ कहने के मुकाबले उपलब्ध वर्ण सेट बहुत छोटा (अधिक अनुमानित) होगा। यह मुझे लगता है कि समान लंबाई के दो तारों के लिए, बड़े वर्ण सेट के साथ एक बेहतर / व्यापक हैश वितरण होगा। यह मुझे लगता है कि यह सुरक्षा में सुधार करेगा। क्या यह धारणा सही है?

OAuth कल्पना 11.10 एन्ट्रॉपी ऑफ़ सीक्रेट्स में इस मुद्दे को उठाती है ।


एन्क्रिप्शन क्यों? क्या हैशिंग पर्याप्त नहीं है? यदि पासवर्ड के लिए सिर्फ हैशिंग काफी अच्छा है, तो क्या यह लंबे समय तक एक्सेस टोकन के लिए बेहतर नहीं होना चाहिए?
एलिकएल्ज़िन-किलाका

सवाल पूछे हुए मुझे 7.5 साल हो चुके हैं। मैं ईमानदारी से याद नहीं कर सकता।
mckamey

1
फिर से पढ़ना, हैशिंग और एन्क्रिप्शन दो अलग-अलग दृष्टिकोण थे। एन्क्रिप्शन डीबी लुकअप के बिना सर्वर को कुछ जानकारी प्राप्त करने की अनुमति देगा। यह कई के बीच एक व्यापार था।
mckamey

जवाबों:


93

OAuth टोकन के बारे में कुछ नहीं कहता है सिवाय इसके कि इसके साथ एक रहस्य जुड़ा हुआ है। इसलिए आपके द्वारा बताई गई सभी योजनाएं काम करेंगी। जैसे-जैसे साइट्स बड़ी होती जाती हैं, हमारा टोकन विकसित होता गया। यहां वे संस्करण हैं जिनका हमने पहले उपयोग किया था,

  1. हमारा पहला टोकन उपयोगकर्ता नाम, टोकन गुप्त और समाप्ति आदि के साथ एक एन्क्रिप्टेड BLOB है। समस्या यह है कि हम मेजबान पर किसी भी रिकॉर्ड के बिना टोकन को रद्द नहीं कर सकते।

  2. इसलिए हमने इसे डेटाबेस में सब कुछ स्टोर करने के लिए बदल दिया और टोकन डेटाबेस की कुंजी के रूप में उपयोग किया जाने वाला एक यादृच्छिक नंबर है। इसका एक उपयोगकर्ता नाम सूचकांक है, इसलिए उपयोगकर्ता के लिए सभी टोकन को सूचीबद्ध करना और इसे रद्द करना आसान है।

  3. हमें हैकिंग की बहुत कम गतिविधियाँ मिलती हैं। यादृच्छिक संख्या के साथ, हमें यह जानने के लिए डेटाबेस में जाना होगा कि टोकन वैध है या नहीं। इसलिए हम फिर से एन्क्रिप्टेड BLOB में वापस चले गए। इस बार, टोकन में केवल कुंजी और समाप्ति का एन्क्रिप्टेड मूल्य है। इसलिए हम डेटाबेस में जाए बिना अमान्य या एक्सपायर टोकन का पता लगा सकते हैं।

कुछ कार्यान्वयन विवरण जो आपकी सहायता कर सकते हैं,

  1. टोकन में एक संस्करण जोड़ें ताकि आप मौजूदा लोगों को तोड़ने के बिना टोकन प्रारूप को बदल सकें। हमारे सभी टोकन में संस्करण के रूप में पहली बाइट है।
  2. BLOB को एन्कोड करने के लिए Base64 के URL-सुरक्षित संस्करण का उपयोग करें ताकि आपको URL-एन्कोडिंग समस्याओं से निपटना न पड़े, जिससे OAuth हस्ताक्षर के साथ डीबग करना अधिक कठिन हो जाता है, क्योंकि आप ट्रिपल एन्कोडेड बेसरेस्ट्रिंग देख सकते हैं।

2
उत्कृष्ट धन्यवाद। संस्करण विचार एक अच्छा है। मुझे URL-फ़्रेंडली बेस 64 मिल रहा है, लेकिन मैं चाह रहा हूँ कि मुझे और भी आसान पढ़ने के लिए सख्ती से अल्फा-न्यूमेरिक एन्कोडिंग मिले।
मैकेमी

पहले ऐसा नहीं सोचा था, बहुत दिलचस्प! मैं एपीसी की-कैशिंग पर योजना बना रहा था कि मैं इसे पढ़ने से पहले डीबी से अनावश्यक रूप से लोड न रखूं। अगर यह साझा-मेमोरी लुकअप APC करता है (कम से कम 2, 3, आदि ... उचित समय पर अनुरोध के भीतर) की तुलना में धीमा नहीं हो सकता है तो भी अनिश्चित।
फिल्पन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.