प्रमाणीकरण और एपीआई कुंजी को उजागर करना


93

मैं REST पर पढ़ रहा हूं और इसके बारे में SO पर बहुत सारे प्रश्न हैं, साथ ही साथ कई अन्य साइटों और ब्लॉगों पर भी। हालाँकि मैंने कभी भी इस विशिष्ट प्रश्न को नहीं देखा है ... किसी कारण से, मैं इस अवधारणा के आसपास अपना मन नहीं लपेट सकता ...

यदि मैं एक RESTful API बना रहा हूं, और मैं इसे सुरक्षित करना चाहता हूं, तो मेरे द्वारा देखे गए तरीकों में से एक सुरक्षा टोकन का उपयोग करना है। जब मैंने अन्य एपीआई का उपयोग किया है, तो एक टोकन और एक साझा रहस्य है ... समझ में आता है। जो मुझे समझ नहीं आ रहा है, जावास्क्रिप्ट (XHR / Ajax) के माध्यम से एक आराम सेवा संचालन के लिए अनुरोध किया जा रहा है, किसी को सूँघने से रोकने के लिए क्या है कि फायरबग (या ब्राउज़र में "दृश्य स्रोत") जैसे कुछ सरल के साथ API कुंजी की प्रतिलिपि बनाना, और फिर कुंजी और गुप्त का उपयोग करके उस व्यक्ति को प्रतिरूपित करना?


मैंने जिन तरीकों को देखा है उनमें से एक सुरक्षा टोकन का उपयोग करना है , वास्तव में बहुत सारे तरीके हैं। क्या आपके पास एक संक्षिप्त उदाहरण है। मुझे लगता है कि आप "REST" बनाम भ्रमित हो सकते हैं "पंजीकृत उपयोगकर्ताओं के लिए केवल एक जावास्क्रिप्ट एपीआई उपलब्ध कराएं" (पूर्व गूगल मैप्स)।
पीटरमम

1
चूंकि आपने लगभग 2 साल पहले पूछा था: आपने आखिरकार खुद का इस्तेमाल क्या किया?
अर्जन

मैंने वास्तव में कुछ भी उपयोग नहीं किया था, मैं अवधारणाओं को बनाने के चारों ओर अपने सिर को लपेटने की कोशिश कर रहा था। ऊपर पीटर पीटर की टिप्पणी शायद सच है ... अभी भी इसे लागू करने की कोई आवश्यकता नहीं थी, लेकिन मैं खुद को बेहतर करना चाहता था ... बाद के लिए धन्यवाद।
tjans

जवाबों:


22

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


9
तो फिर अगर यह सिर्फ वह संकेत है जो पारित हो चुका है ... क्या वह अभी भी जावास्क्रिप्ट में उजागर नहीं हुआ है ... तो अगर मैं अपने एपीआई के माध्यम से अपने वेबपेज पर एक झिलमिलाहट तस्वीर लगाता हूं (जिसे जावास्क्रिप्ट कहा जाता है), और आप मेरे पृष्ठ पर जाएं, ' मैं अपने पृष्ठ पर जाने वाले किसी व्यक्ति के लिए अपनी एपीआई कुंजी को उजागर नहीं कर सकता हूं?
tjans

6
मुझे नहीं लगता कि मैं अपने सवाल को सही ढंग से पूछ रहा हूं ... शायद इस कारण का हिस्सा मुझे वह नहीं मिला जो मैं पहली बार देख रहा था। जब मैं अपना अजाक्स कॉल करता हूं, तो jquery का उपयोग करके कहता हूं, मुझे ajax कॉल में एपीआई कुंजी को एम्बेड करना होगा ताकि यह सर्वर को पास हो जाए ... उस बिंदु पर कोई व्यक्ति एपीआई कुंजी देख सकता है। अगर मैं यह गलत समझ रहा हूं, तो एपीआई कुंजी को अनुरोध के साथ कैसे भेजा जाता है, अगर यह क्लाइंट स्क्रिप्ट में एम्बेडेड नहीं है?
tjans

4
निष्कर्ष निकालने के लिए: लोगों को एक ओपनैपी / रेस्टापी का उपयोग करने से पहले एक एपिक + एपिसरेक्ट जोड़ी सौंपी जाएगी, एपिके + साइन को सर्वराइड में स्थानांतरित किया जाएगा ताकि यह सुनिश्चित किया जा सके कि सर्वर जो अनुरोध कर रहा है, एपिसेरेट को सुरक्षा के लिए सर्वर पर स्थानांतरित नहीं किया जाएगा। ।
जेम्स.एक्सयू

7
इसलिए @ James.Xu का कथन है कि 'गुप्त का उपयोग वर्तमान अनुरोध का संकेत उत्पन्न करने के लिए किया जाता है' FALSE है! क्योंकि ग्राहक को रहस्य का पता नहीं है, क्योंकि यह उसे भेजना असुरक्षित होगा (और उसे और कैसे पता होगा?) 'गुप्त' जो तकनीकी रूप से एक 'निजी कुंजी' है, केवल सर्वर द्वारा उपयोग किया जाता है (क्योंकि ग्राहक के संकेत की तुलना में एक संकेत उत्पन्न करने के लिए कोई और इसे नहीं जानता)। तो सवाल: 'एपीआई कुंजी' के साथ किस तरह का डेटा जोड़ा जा रहा है जो क्लाइंट और सर्वर से परे किसी और को नहीं पता है? चिन्ह = api_key + क्या?
एसी

1
तुम सही हो, @AC। भले ही दोनों सर्वर (वेबसाइट और तीसरी पार्टी एपीआई) एक ही रहस्य जानते हों, कोई भी वेबसाइट सर्वर पर कुछ हस्ताक्षर की गणना नहीं कर सकता है और फिर उस परिणाम को एचटीएमएल / जावास्क्रिप्ट में डाल सकता है , और फिर ब्राउज़र को एपीआई के साथ पास कर सकता है। ऐसा करने से, कोई अन्य सर्वर अनुरोध कर सकता है कि पहले वेब सर्वर से HTML, प्रतिक्रिया से हस्ताक्षर प्राप्त करें, और HTML में अपनी वेबसाइट पर इसका उपयोग करें। (मुझे वास्तव में लगता है कि उपरोक्त पोस्ट इस सवाल का जवाब नहीं देती है कि HTML में एक सार्वजनिक एपीआई कुंजी कैसे सुरक्षित हो सकती है।)
अर्जन

61

हम एक एपीआई का खुलासा कर रहे हैं जिसे भागीदार केवल उन डोमेन पर उपयोग कर सकते हैं जिन्हें उन्होंने हमारे साथ पंजीकृत किया है। इसकी सामग्री आंशिक रूप से सार्वजनिक है (लेकिन अधिमानतः केवल उन डोमेन पर दिखाया जाना है जिन्हें हम जानते हैं), लेकिन हमारे उपयोगकर्ताओं के लिए अधिकतर निजी है। इसलिए:

  • क्या दिखाया गया है यह निर्धारित करने के लिए , हमारे उपयोगकर्ता को हमारे साथ लॉग इन करना होगा, लेकिन इसे अलग से संभाला जाएगा।

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

यह API कुंजी वास्तव में किसी को भी दिखाई देती है, हम अपने साथी को किसी अन्य तरीके से प्रमाणित नहीं करते हैं, और हमें REFERER की आवश्यकता नहीं है । फिर भी, यह सुरक्षित है:

  1. जब हमारा get-csrf-token.js?apiKey=abc123अनुरोध है:

    1. abc123डेटाबेस में कुंजी देखें और उस कुंजी के लिए मान्य डोमेन की एक सूची प्राप्त करें।

    2. CSRF सत्यापन कुकी के लिए देखें। यदि यह मौजूद नहीं है, तो एक सुरक्षित यादृच्छिक मान उत्पन्न करें और इसे केवल HTTP- सत्र सत्र में रखें। यदि कुकी मौजूद थी, तो मौजूदा यादृच्छिक मान प्राप्त करें।

    3. एपीआई कुंजी से सीएसआरएफ टोकन और कुकी से यादृच्छिक मूल्य बनाएं, और इस पर हस्ताक्षर करें । (सर्वर पर टोकन की सूची रखने के बजाय, हम मूल्यों पर हस्ताक्षर कर रहे हैं। दोनों मान हस्ताक्षरित टोकन में पठनीय होंगे, यह ठीक है।)

    4. कैश्ड नहीं होने के लिए प्रतिक्रिया सेट करें, कुकी जोड़ें, और एक स्क्रिप्ट लौटाएं जैसे:

      var apiConfig = apiConfig || {};
      if(document.domain === 'expected-domain.com' 
            || document.domain === 'www.expected-domain.com') {
      
          apiConfig.csrfToken = 'API key, random value, signature';
      
          // Invoke a callback if the partner wants us to
          if(typeof apiConfig.fnInit !== 'undefined') {
              apiConfig.fnInit();
          }
      } else {
          alert('This site is not authorised for this API key.');
      }

    टिप्पणियाँ:

    • उपरोक्त एक सर्वर साइड स्क्रिप्ट को अनुरोध को रोकने से नहीं रोकता है, लेकिन केवल यह सुनिश्चित करता है कि यदि ब्राउज़र द्वारा अनुरोध किया गया है तो डोमेन मेल खाता है।

    • जावास्क्रिप्ट के लिए एक ही मूल नीति सुनिश्चित करता है कि एक ब्राउज़र को लोड और फिर जावास्क्रिप्ट स्रोत का निरीक्षण करने के एक्सएचआर (अजाक्स) का उपयोग नहीं कर सकते हैं। इसके बजाय, एक नियमित ब्राउज़र केवल <script src="https://our-api.com/get-csrf-token.js?apiKey=abc123">(या एक गतिशील समतुल्य) का उपयोग करके इसे लोड कर सकता है , और फिर कोड चलाएगा। बेशक, आपके सर्वर को उत्पन्न जावास्क्रिप्ट के लिए क्रॉस-ओरिजिनल रिसोर्स शेयरिंग और न ही JSONP का समर्थन नहीं करना चाहिए ।

    • एक ब्राउज़र स्क्रिप्ट document.domainउपरोक्त स्क्रिप्ट को लोड करने से पहले मूल्य बदल सकती है । लेकिन इसके साथ ही मूल नीति केवल द्वारा डोमेन को छोटा करने के लिए अनुमति देता है को हटाने उपसर्गों, को फिर से लिखने की तरह subdomain.example.comकरने के लिए बस example.com, या myblog.wordpress.comकरने के लिए wordpress.com, या भी कुछ ब्राउज़रों में bbc.co.ukकरने के लिए co.uk

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

  2. जब कोई उपयोगकर्ता लॉग इन करता है, तो आपको जो भी पसंद हो, उसमें कुछ उपयोगकर्ता कुकी सेट करें। (जावास्क्रिप्ट का अनुरोध करने से पहले उपयोगकर्ता पहले ही लॉग इन कर सकता है।)

  3. सर्वर (GET और JSONP अनुरोध सहित) के बाद के सभी एपीआई अनुरोध में CSRF टोकन, CSRF सत्यापन कुकी और (यदि लॉग ऑन है) उपयोगकर्ता कुकी शामिल होनी चाहिए। यदि अनुरोध पर भरोसा किया जाए तो सर्वर अब यह निर्धारित कर सकता है:

    1. एक मान्य CSRF टोकन की उपस्थिति सुनिश्चित करता है कि जावास्क्रिप्ट को अपेक्षित डोमेन से लोड किया गया था, अगर एक ब्राउज़र द्वारा लोड किया गया है।

    2. सीएसआरएफ टोकन की वैधता कुकी के बिना उपस्थिति फर्जीवाड़े को इंगित करती है।

    3. CSRF टोकन और CSRF सत्यापन कुकी दोनों की उपस्थिति कुछ भी सुनिश्चित नहीं करती है: यह या तो जाली सर्वर साइड अनुरोध हो सकता है, या ब्राउज़र से मान्य अनुरोध हो सकता है। (यह असमर्थित डोमेन से बने ब्राउज़र से अनुरोध नहीं हो सकता है।)

    4. उपयोगकर्ता कुकी की उपस्थिति सुनिश्चित करता है कि उपयोगकर्ता लॉग ऑन है, लेकिन यह सुनिश्चित नहीं करता है कि उपयोगकर्ता दिए गए भागीदार का सदस्य है, और न ही उपयोगकर्ता सही वेबसाइट देख रहा है।

    5. CSRF सत्यापन कुकी के बिना उपयोगकर्ता कुकी की उपस्थिति जालसाजी को इंगित करती है।

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

      तो: सर्वर अब हस्ताक्षरित टोकन से सुरक्षित रूप से एपीआई कुंजी का उपयोग कर सकता है।

    7. यदि किसी भी बिंदु पर सर्वर अनुरोध पर भरोसा नहीं करता है, तो एक 403 निषिद्ध वापस आ जाता है। विजेट उपयोगकर्ता को एक चेतावनी दिखा कर इसका जवाब दे सकता है।

CSRF सत्यापन कुकी पर हस्ताक्षर करने की आवश्यकता नहीं है, क्योंकि हम हस्ताक्षरित CSRF टोकन से इसकी तुलना कर रहे हैं। कुकी पर हस्ताक्षर नहीं करने से प्रत्येक HTTP अनुरोध कम हो जाता है, और सर्वर सत्यापन थोड़ा तेज हो जाता है।

उत्पन्न CSRF टोकन अनिश्चित काल के लिए वैध है, लेकिन केवल सत्यापन कुकी के साथ संयोजन में, इसलिए प्रभावी रूप से ब्राउज़र बंद होने तक।

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

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


1
कॉर्स का उपयोग करते समय, शायद कोई भी सुरक्षित रूप से इसका विस्तार कर सकता है। उपरोक्त के बजाय, OPTIONSURL में कुछ सार्वजनिक एपीआई कुंजी के साथ पूर्व-उड़ान अनुरोध को संभालने के दौरान , सर्वर एक ब्राउज़र को बता सकता है कि कौन से डोमेन को अनुमति दी गई है (या अनुरोध को रद्द करें)। हालांकि सावधान रहें कि कुछ अनुरोधों के लिए पूर्व-उड़ान अनुरोध की आवश्यकता नहीं होती है, या कॉर्स का उपयोग बिल्कुल नहीं करेंगे , और कि कॉर्स को IE8 + की आवश्यकता है। यदि IE7 के लिए कुछ फ्लैश फालबैक का उपयोग किया जाता है, तो शायद कुछ गतिशील crossdomain.xmlइसके लिए समान हासिल करने में मदद कर सकते हैं। हमने अभी तक CORS / Flash की कोशिश नहीं की है।
अर्जन

10

इस सवाल का एक स्वीकृत उत्तर है लेकिन स्पष्ट करने के लिए, साझा गुप्त प्रमाणीकरण इस तरह काम करता है:

  1. क्लाइंट के पास सार्वजनिक कुंजी है, इसे किसी के साथ साझा किया जा सकता है, इससे कोई फर्क नहीं पड़ता, इसलिए आप इसे जावास्क्रिप्ट में एम्बेड कर सकते हैं। इसका उपयोग सर्वर पर उपयोगकर्ता की पहचान करने के लिए किया जाता है।
  2. सर्वर में गुप्त कुंजी है और इस गुप्त MUST को संरक्षित किया जाना चाहिए। इसलिए, साझा कुंजी प्रमाणीकरण के लिए आवश्यक है कि आप अपनी गुप्त कुंजी की सुरक्षा कर सकें। इसलिए एक सार्वजनिक जावास्क्रिप्ट क्लाइंट जो सीधे दूसरी सेवा से जुड़ता है, यह संभव नहीं है क्योंकि आपको गुप्त की सुरक्षा के लिए सर्वर बिचौलिया की आवश्यकता होती है।
  3. सर्वर संकेत कुछ एल्गोरिदम का उपयोग करने का अनुरोध करता है जिसमें गुप्त कुंजी (गुप्त कुंजी नमक की तरह होती है) और अधिमानतः टाइमस्टैम्प तब सेवा को अनुरोध भेजता है। टाइमस्टैम्प "रिप्ले" हमलों को रोकने के लिए है। अनुरोध का एक हस्ताक्षर लगभग n सेकंड के लिए ही मान्य है । आप सर्वर पर टाइमस्टैम्प हेडर प्राप्त करके देख सकते हैं कि हस्ताक्षर में शामिल टाइमस्टैम्प का मान होना चाहिए। यदि वह टाइमस्टैम्प समाप्त हो गया है, तो अनुरोध विफल हो जाता है।
  4. सेवा को वह अनुरोध प्राप्त होता है जिसमें केवल हस्ताक्षर नहीं होते हैं, बल्कि उन सभी क्षेत्रों को भी शामिल किया जाता है जो सादे पाठ में हस्ताक्षर किए गए थे।
  5. सेवा तब साझा गुप्त कुंजी का उपयोग करके उसी तरह से अनुरोध पर हस्ताक्षर करती है और हस्ताक्षर की तुलना करती है।

सच है, लेकिन डिजाइन से आपका उत्तर एपीआई कुंजी को उजागर नहीं करता है । हालांकि, कुछ APIs में API कुंजी है सार्वजनिक रूप से दिखाई, और कहा कि क्या सवाल के बारे में था: "एक आराम सेवा आपरेशन करने के लिए अनुरोध [...] जावास्क्रिप्ट (एक्सएचआर / अजाक्स) के माध्यम से किया" । (स्वीकृत उत्तर उस बारे में भी गलत है, मुझे लगता है; आपका अंक 2 उस बारे में स्पष्ट है, अच्छा है।)
अर्जन

1

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

REST सेवा को सुरक्षित रूप से चलाने के लिए आपको https, और संभवतः क्लाइंट प्रमाणीकरण को सक्षम करना होगा। लेकिन आखिरकार, यह REST विचार से परे है। REST सुरक्षा के बारे में कभी बात नहीं करता है।


8
मैं वास्तव में कुंजी का मतलब था। अगर मुझे सही ढंग से याद है, तो एपीआई का उपयोग करने के लिए, आप एपीआई कुंजी को पारित कर रहे हैं और बाकी सेवा को प्रमाणित करने के लिए गुप्त हैं, सही? मुझे पता है कि एक बार यह तार के ऊपर से गुजर जाता है, इसे एसएसएल द्वारा एन्क्रिप्ट किया जाएगा, लेकिन इसे भेजे जाने से पहले, यह ग्राहक कोड द्वारा पूरी तरह से दिखाई देता है जो इसका उपयोग करता है ...
tjans

1

आप सर्वर साइड पर जो करना चाहते हैं वह एक एक्सपायरिंग सेशन आईडी जनरेट करता है जो क्लाइंट को लॉगिन या साइनअप पर वापस भेजा जाता है। क्लाइंट उस सत्र आईडी का उपयोग बाद के अनुरोधों पर हस्ताक्षर करने के लिए एक साझा रहस्य के रूप में कर सकता है।

सत्र आईडी केवल एक बार पास की जाती है और यह एसएसएल के ऊपर होना चाहिए।

उदाहरण यहाँ देखें

सत्र अपहरण को रोकने के अनुरोध पर हस्ताक्षर करते समय एक गैर और टाइमस्टैम्प का उपयोग करें।


1
लेकिन जब कोई तीसरा पक्ष आपके एपीआई का उपयोग करता है तो कोई लॉगिन कैसे हो सकता है? यदि उपयोगकर्ता लॉगिन करने जा रहा है, तो चीजें आसान हैं: बस एक सत्र का उपयोग करें? लेकिन जब अन्य वेबसाइटों को आपके एपीआई को प्रमाणित करने की आवश्यकता होती है, तो यह मदद नहीं करता है। (इसके अलावा, यह आपके ब्लॉग को बढ़ावा देने की तरह बहुत बदबू आ रही है।)
अर्जन

1

मैं इस प्रश्न का उत्तर मूल संदर्भ में देने का प्रयास करूंगा। तो सवाल है कि क्या गुप्त (एपीआई) कुंजी को जावास्क्रिप्ट के साथ रखा जाना सुरक्षित है।

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

मेरी राय में एक समाधान यह है कि जावास्क्रिप्ट कॉल अनिवार्य रूप से एक आंतरिक सर्वर घटक के अनुरोध को पारित करता है जो बाकी कॉल करने के लिए जिम्मेदार है। आंतरिक सर्वर घटक का कहना है कि एक सर्वलेट एक सुरक्षित स्रोत से एपीआई कुंजी को पढ़ेगा जैसे कि अनुमति आधारित फ़ाइल सिस्टम, HTTP हेडर में डालें और बाहरी आराम कॉल करें।

आशा है कि ये आपकी मदद करेगा।

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