अन्य एपीआई सुरक्षा: एचएमएसी / कुंजी हैशिंग बनाम जेडब्ल्यूटी


16

मैंने अभी यह लेख पढ़ा है जो कुछ साल पुराना है लेकिन आपके REST API को सुरक्षित करने के एक चतुर तरीके का वर्णन करता है। अनिवार्य रूप से:

  • प्रत्येक ग्राहक के पास एक विशिष्ट सार्वजनिक / निजी कुंजी जोड़ी होती है
  • केवल क्लाइंट और सर्वर निजी कुंजी जानते हैं; यह तार के ऊपर कभी नहीं भेजा जाता है
  • प्रत्येक अनुरोध के साथ, ग्राहक कई इनपुट (संपूर्ण अनुरोध स्वयं, वर्तमान टाइमस्टैम्प और निजी कुंजी) लेता है और अनुरोध के एक हैश का उत्पादन करने के लिए उन्हें HMAC फ़ंक्शन के माध्यम से चलाता है।
  • क्लाइंट तब सामान्य अनुरोध (जिसमें सार्वजनिक कुंजी होती है) और सर्वर को हैश भेजता है
  • सर्वर क्लाइंट की निजी कुंजी (प्रदान की गई सार्वजनिक कुंजी के आधार पर) को देखता है और कुछ टाइमस्टैम्प चेक (जो कि मुझे समझ में नहीं आता है) करता है जो अनुरोध को सत्यापित करता है, रिप्ले हमले का शिकार नहीं होता है
  • यदि सब कुछ ठीक है, तो सर्वर अनुरोध की अपनी हैश उत्पन्न करने के लिए निजी कुंजी और उसी HMAC फ़ंक्शन का उपयोग करता है
  • सर्वर तब दोनों हैश की तुलना करता है (क्लाइंट द्वारा भेजे गए एक के साथ-साथ यह उत्पन्न होता है); यदि वे मेल खाते हैं, तो अनुरोध प्रमाणित होता है और आगे बढ़ने की अनुमति दी जाती है

मैं तब JWT से टकरा गया , जो बहुत समान लगता है। हालाँकि, पहले लेख में JWT का जिक्र नहीं है, और इसलिए मैं सोच रहा हूँ कि क्या JWT उपरोक्त मौखिक समाधान से अलग है, और यदि ऐसा है, तो कैसे।


1
लोल ... मैं बस एक ही सटीक सवाल पूछना चाहता था और तुम्हारा भर आया। सबसे पहली चीजों में से एक जो मैंने स्टेटलेस प्रमाणीकरण के बारे में पाया था, वह एडब्ल्यूएस से थी: docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/… , और इस massimilianoscarcco.com/ ... जैसा कुछ लागू किया । तब मुझे JWS / JWT मिला और यह किसी तरह समान है। लेकिन जहां तक ​​मैं समझता हूं कि JWT एक मानक है और ऊपर वर्णित अन्य समाधान कुछ कस्टम कार्यान्वयन (मानकीकृत नहीं) हैं। कोई मुझे ठीक करे यदि मैं गलत हूं।
nyxz

2
यह जानने के लिए अच्छा है कि मैं इस प्रकार के विवरणों के बारे में चिंतित नहीं हूं! जेडब्ल्यूटी निश्चित रूप से महसूस करता है इसी तरह की है, और बोनस है कि यह मानकीकृत किया गया है। मैं बस सोच रहा हूं कि इस कस्टम HMAC समाधान के साथ यह कैसे (सुरक्षा-वार) मेल करता है।
स्माइब

जवाबों:


7

आइए इसे बहुत ही मूल उत्तर के साथ शुरू करें।

JWT (OAuth और OpenID के संदर्भ में प्रयुक्त) को क्लाइंट और एपीआई के बीच साझा रहस्यों की आवश्यकता नहीं है। 2 के 3 घटक और जोड़े एक गुप्त साझा करते हैं: ग्राहक <-> पहचान सर्वर, पहचान सर्वर <-> एपीआई।

यह एपीआई से पहचान सर्वर के लिए सबसे अधिक जटिलता को स्थानांतरित करता है, एपीआई को बस यह जांचना होगा कि पहचान सर्वर द्वारा टोकन जारी किया गया था और इसके साथ गुस्सा नहीं किया गया था। यह सत्यापित करने के लिए कि एपीआई जाँचता है कि पहचान सर्वर और एपीआई के बीच ज्ञात एकल साझा रहस्य के साथ JWT- हस्ताक्षर मान्य है। बस!

पहचान सर्वर कैसे मान्य करता है उपयोगकर्ता की पहचान व्यापक रूप से भिन्न हो सकती है (कई मामलों में यह पुराने उपयोगकर्ता नाम + टीएलएस-कनेक्शन पर पासवर्ड जोड़ी है), लेकिन आपके एपीआई पर कोई प्रभाव नहीं है।

JWT का उपयोग करने पर संदेश की गोपनीयता और सुरक्षा स्वयं ही टोकन, TLS द्वारा नियंत्रित किए जाते हैं, JWT ऐसे मुद्दों से अनभिज्ञ है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.