एपीआई प्रमाणीकरण, एक बार टोकन बनाम डायनामिक टोकन


13

हम एक नई परियोजना पर काम कर रहे हैं, हम दो प्रमुख डेवलपर्स हैं और सर्वर और क्लाइंट के बीच संचार को सुरक्षित करने के लिए एक टोकन का उपयोग करने के तरीके के बारे में एक चौराहे पर मिला है।

पहला सुझाव: (एक बार टोकन एके स्टेटिक टोकन)

  1. क्लाइंट एक प्राथमिक टोकन का अनुरोध करता है, उपयोगकर्ता नाम और पासवर्ड भेजकर और चालू_टाइम (यह चर सर्वर के डेटाबेस और क्लाइंट साइड में भी सहेजा जाएगा) एपीआई के लिए, सर्वर इनपुट की व्याख्या करता है, और एक हैशेड टोकन प्रदान करता है (जैसे: 58f52c075aca5d3e07869598c4d66648) इसे डेटाबेस में सेव करता है और क्लाइंट को वापस कर देता है।

  2. क्लाइंट अब प्राइमरी टोकन को सेव करता है, और ऑथेंटिकेशन रिक्वेस्ट में भेजे गए प्राइम_ टोकन + करंट_टाइम वैरिएबल का उपयोग करके नया हैशेड टोकन बनाता है (इस नए टोकन को कॉल करने देता है, main_token) सर्वर भी ऐसा ही करता है और समान एल्गोरिथ्म का उपयोग करके एक ही टोकन बनाता है ।

  3. हर बार जब क्लाइंट सर्वर API पर सवाल करता है, तो वह सर्वर को main_token भेजता है, अब सर्वर उसमें उत्पन्न टोकन की तुलना करता है, क्लाइंट द्वारा भेजे गए main_token के साथ, यदि यह मेल खाता है, तो इसका मतलब है कि उपयोगकर्ता वास्तविक है

दूसरा सुझाव: (डायनामिक टोकन)

  1. क्लाइंट दो यादृच्छिक कुंजी ($ key1 = रैंड (10000,90000); $ key2 = रैंड (10000,90000)) जनरेट करता है। API पर प्रत्येक अनुरोध पर, क्लाइंट क्वेरी प्रकार का उपयोग करके एक हैश बनाता है, और दो कुंजी के साथ। एक जटिल एल्गोरिथ्म, और सर्वर के लिए इन दो कुंजी + हैश भेजता है

  2. सर्वर, क्लाइंट में उपयोग किए जाने वाले समान एल्गोरिथ्म का उपयोग करता है, एक हैश बनाता है, और तुलना क्लाइंट द्वारा भेजे गए एक से करता है, यदि यह मेल खाता है, तो सर्वर क्वेरी से निपटने के लिए आगे बढ़ता है।


अब, सवाल यह है कि एपीआई अनुरोधों को हासिल करने के लिए कौन सा सबसे तर्कसंगत और सुरक्षित तरीका है?


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

1
शायद मुझे कुछ याद आ रहा है ... लेकिन प्रमाणीकरण तंत्र के रूप में OAuth का उपयोग क्यों नहीं किया जाता है? यह मानक है और आपके ग्राहकों के लिए हर भाषा के बारे में उपयोग करने के लिए पुस्तकालय हैं।
इकोडे

जवाबों:


14

मुझे वास्तव में सामान्य रूप से पहला दृष्टिकोण पसंद है।

  • इसे समझना और लागू करना सरल है
  • यह सुरक्षित है (मेरी जानकारी के लिए)
  • यह एक असामान्य दृष्टिकोण नहीं है जो मैंने अतीत में देखा है

एक चीज़ जो मैंने पहले नहीं देखी थी, जिसे आपको ध्यान में रखना चाहिए, टाइमस्टैम्प का उपयोग टोकन को हैश करने के लिए किया जाता है, जो एक टीटीएल समाप्ति की आवश्यकता होती है जो बहुत कम होती है (जैसे 1 सेकंड) ताकि आप सत्यापित करें कि संदेश भेजा नहीं गया था 12 घंटे पहले एक संदेश से एक ही टाइमस्टैम्प और टोकन; स्पष्ट रूप से यह वैध के रूप में गणना करेगा लेकिन इस मामले में नहीं है।

यदि ये केवल दो ही विकल्प हैं जिन पर आप विचार कर रहे हैं, हालांकि मैं यह सुनिश्चित करना चाहता हूं कि आपने अन्य दृष्टिकोणों पर भी ध्यान दिया है, क्योंकि कई हैं। वास्तव में मैं सूची से अधिक जा रहा हूं। ये कुछ सामान्य सामान्य दृष्टिकोण हैं जो केवल यह देखने के लिए अध्ययन करने के लायक हैं कि क्या वे आपके उद्देश्य को बेहतर ढंग से फिट कर सकते हैं, और यदि उन्हें समझने के अलावा कुछ भी नहीं हो सकता है, तो आप जिस भी दृष्टिकोण के साथ चलते हैं, उसे कसने में मदद करने के लिए आपको कुछ विचार दे सकते हैं।

ध्यान दें, मैं सुरक्षा विशेषज्ञ नहीं हूं ।


OAuth / संघीय

इस दृष्टिकोण में आपके पास एक 3 पार्टी गारंटर है जहां उपभोग कोड टोकन / सर्टिफिकेट का अनुरोध करता है / आपके पास उनसे क्या है और आपके पास है, इस बिंदु पर, आपको इस बिंदु पर सभी 3 पार्टी से पूछना होगा कि क्या आपको कुंजी दी गई है कानूनी।

समर्थक:

  • मानक आधारित
  • मुद्दे अन्य लोगों के सिस्टम पर दूसरों द्वारा पाए जाएंगे ताकि आपको पता चलेगा कि असुरक्षा होती है या नहीं
  • आपके द्वारा बहुत कम कार्य की आवश्यकता होगी

कोन:

  • आपको अपनी मुख्य सेवा से बाहर करने के लिए तीसरे पक्ष के सेवादार और उनके एपीआई से निपटना होगा, या अपनी खुद की "तीसरी पार्टी" की मेजबानी करनी होगी।
  • कई सेवाओं के लिए overkill, लेकिन वैचारिक रूप से विचार करने लायक

अतुल्यकालिक प्रमाण पत्र

यहां आपके पास अपने क्लाइंट को एक सार्वजनिक प्रमाणपत्र के साथ अपने संचार को एन्क्रिप्ट करना होगा, जब उन्होंने एक उपयोगकर्ता बनाया था। अपनी तरफ से आप उपयोगकर्ता के साथ जुड़ी निजी कुंजी का उपयोग करके डिक्रिप्ट करेंगे। आम तौर पर आप संचार को एक चुनौती-प्रतिक्रिया के साथ शुरू करते हैं, यह दिखाने के लिए कि वे एन्क्रिप्ट करने / डिक्रिप्ट कर सकते हैं जैसा कि आप उन्हें पहचानने की अपेक्षा करते हैं कि वे कौन होने का दावा करते हैं। यद्यपि "सिंक्रोनस" दृष्टिकोण संभव है, जो चुनौती-प्रतिक्रिया का उपयोग नहीं करते हैं, उनके पास थोड़ी कम सुरक्षा और कुछ समय के सिंक्रनाइज़ेशन मुद्दे हैं जो बहुत मुश्किल बना सकते हैं।

से नोवेल (हाँ मैं नोवेल पता है,? वास्तव में?)

टोकन वन-टाइम पासवर्ड जनरेट करने के आधार के रूप में एक चर का उपयोग करते हैं। इस चर को चुनौती कहा जाता है। पासवर्ड उत्पन्न करने के लिए उपयोग किए जाने वाले चर का निर्धारण करने के लिए दो मुख्य विधियां एसिंक्रोनस या सिंक्रोनस हैं।

अतुल्यकालिक या चुनौती-प्रतिक्रिया विधि के साथ, सर्वर सॉफ़्टवेयर टोकन को बाहरी चुनौती भेजता है --- एक बेतरतीब ढंग से उत्पन्न चर --- टोकन डिवाइस को एन्क्रिप्ट करने के लिए। टोकन इस चुनौती चर, एन्क्रिप्शन एल्गोरिथ्म, और प्रतिक्रिया उत्पन्न करने के लिए साझा रहस्य --- सही ढंग से एन्क्रिप्टेड पासवर्ड का उपयोग करता है।

सिंक्रोनस विधि के साथ, पासवर्ड उत्पन्न करने के लिए उपयोग किए जाने वाले चुनौती चर को टोकन और सर्वर द्वारा आंतरिक रूप से निर्धारित किया जाता है। प्रत्येक डिवाइस के भीतर एक समय काउंटर, इवेंट काउंटर, या समय और इवेंट काउंटर संयोजन चुनौती चर के आधार के रूप में उपयोग किया जाता है। क्योंकि टोकन और सर्वर प्रत्येक अलग-अलग और आंतरिक रूप से अपने स्वयं के काउंटर से चुनौती चर का निर्धारण करते हैं, इसलिए उनके समय काउंटर और इवेंट काउंटर के लिए सिंक्रनाइज़ रहना बहुत महत्वपूर्ण है। क्योंकि सर्वर और टोकन के लिए सिंक से बाहर निकलना इतना आसान है, अधिकांश कार्यान्वयन काउंटरों के बीच एक निश्चित मात्रा में बहाव की अनुमति देते हैं। आमतौर पर पासवर्ड की गणना के लिए इन काउंटर मानों की एक छोटी श्रृंखला या विंडो का उपयोग किया जाता है। हालाँकि, यदि टोकन और सर्वर इस विंडो से परे सिंक से बाहर निकलते हैं,

समर्थक:

  • प्रमाण पत्र में सीए जड़ें होती हैं जो उन्हें विश्वसनीय और जाली बनाना मुश्किल बनाती हैं
  • आसानी से प्रमाणित दुकानों के प्रबंधन और रखरखाव के लिए ऑपरेटिंग सिस्टम में मानक सुविधाएं हैं
  • अच्छी तरह से अध्ययन किया दृष्टिकोण, इस पर उपलब्ध बहुत सारी जानकारी
  • विभिन्न प्रकार की अन्य चीजों के साथ एक्सपायरी मानक प्रमाण पत्र की अंतर्निहित सुविधाएं हैं, वे आम तौर पर मजबूत हैं

कोन:

  • कार्यक्रम के साथ काम करने के लिए प्रमाण पत्र मुश्किल हो सकते हैं
  • यदि आपको बाहरी CA की आवश्यकता होती है, तो निर्भर करता है कि वह मुक्त नहीं हो सकता है
  • रूट प्रमाणपत्र कॉन्फ़िगर किए गए हैं यह सुनिश्चित करने के लिए मैन्युअल रूप से प्रमाणित स्टोर बनाए रखने की आवश्यकता हो सकती है

NTLM

हंसो मत, अगर यह एक छोटी या आंतरिक एकमात्र सेवा है और आप एक विंडोज़ वातावरण में हैं, तो एक्सेस की गारंटी देने के लिए मानक NTLM प्रमाणीकरण का उपयोग करने में कुछ भी गलत नहीं है। खासकर यदि आप IIS के साथ काम कर रहे हैं तो यह सबसे आसान तरीका है। आसान बनाए रखने और कॉन्फ़िगर करने के साथ ही web.config में।

समर्थक:

  • कॉन्फ़िगर करना, कार्यान्वित करना और बनाए रखना बेहद आसान है

कोन:

  • न्यूनतम अंतर
  • सार्वजनिक रूप से प्रमाणीकरण के लिए पर्याप्त नहीं है

Nonces

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

समर्थक:

  • Thwarts replay हमलों काफी अच्छी तरह से
  • पूरी तरह से लागू करना या समझना मुश्किल नहीं है

कोन:

  • ग्राहकों को प्रत्येक अनुरोध के लिए दो अनुरोध करने की आवश्यकता होती है (हालांकि केवल कुछ अनुरोधों के लिए गैर-आवश्यकता द्वारा कम किया जा सकता है )
  • गैर-प्रबंधन के प्रबंधन की आवश्यकता होती है, जिसे लेन-देन होना चाहिए
  • नॉनवेज के लिए अतिरिक्त अनुरोधों की आवश्यकता से नकारात्मक रूप से प्रदर्शन को प्रभावित करता है (लेन-देन के साथ काम करने की संसाधन लागत बढ़ जाती है)

मुझे संदेह है कि टीटीएल को एक मिनट से भी अधिक समय की आवश्यकता हो सकती है, हालांकि एक मिनट से भी कम समय (HTTP / HTTPS को परिवहन के रूप में मानते हुए)। TTL परिवहन के समय-अंतराल पर निर्भर करता है (यानी, प्रत्यक्ष कनेक्शन के लिए ईमेल की तुलना में अधिक लंबा)।
डोनल फेलो

1
आप केर्बरोस को भूल गए । और मैं आपके स्वयं के प्रमाणीकरण / टोकन पैकेज को रोल करने के खिलाफ एक असाधारण रूप से मजबूत चेतावनी देता हूं जैसे प्रश्न का सुझाव देता है। RYO ऑर्टिफिकेशन गलत होना बहुत आसान है; एक उदाहरण केवल digit०,००० ५ अंकों के संख्यात्मक मान (ओपी के २ के मामले से) के लिए एक प्रमुख कुंजी स्थान का उपयोग करना होगा। आपको इस बात से भी सावधान रहना होगा कि आप किस हैश (1 मामले से) का उपयोग करते हैं। कई अब इंद्रधनुषी टेबल लुकअप से तुच्छ रूप से टूट गए हैं।

1
उत्तर के साथ बहुत बहुत धन्यवाद, मैं उस परियोजना से स्थानांतरित हो गया हूं, लेकिन मैं इस प्रश्न को अपने पसंदीदा में रखूंगा। क्षमा करें कि मैंने आपका उत्तर स्वीकार नहीं किया क्योंकि यह बहुत गहन है। लेकिन, नॉवेल खराब होने के साथ क्या हो रहा है? :(
SAFAD

@SAFAD नोवेल के बारे में कुछ भी बुरा नहीं है, मुझे सिर्फ सुरक्षा विवरणों पर संसाधनों की तलाश में फेंक दिया गया था कि मुझे नॉवेल से कुछ आधुनिक मिला, मैंने सोचा कि कंपनी वापस युगों में मर गई .. दी गई है कि वे अपने दिन में खेल से आगे थे लेकिन वह था बहुत समय पहले। मैं सभी को समान रूप से स्वीकार करने की सराहना करता हूं, जैसा कि ग्लेन के ऊपर उल्लेख है कि यह अधिक गहन हो सकता है लेकिन मैंने सामान्य दृष्टिकोणों का एक सरलीकृत अवलोकन देने की कोशिश की। केर्बरोस एक बहुत बड़ा निरीक्षण और अच्छा विकल्प है। मैं इसे अभी जोड़ूंगा ..
जिमी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.