API कुंजी को कहां रखें: एक कस्टम HTTP हेडर बनाम एक कस्टम स्कीम के साथ प्राधिकरण हेडर


19

मैं एक API कुंजी के माध्यम से प्राधिकरण / प्रमाणीकरण का उपयोग करके एक REST API डिज़ाइन कर रहा हूं।

मैंने यह पता लगाने की कोशिश की कि इसके लिए सबसे अच्छी जगह क्या है और पता चला कि बहुत से लोग कस्टम HTTP हेडर का उपयोग करने का सुझाव देते हैं ProjectName-Api-Key, जैसे:

ProjectName-Api-Key: abcde

लेकिन यह भी संभव है और वैचारिक रूप से Authorizationएक कस्टम योजना के साथ हेडर का उपयोग करने के लिए सही है , जैसे:

Authorization: ApiKey abcde

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

आप किस तरह से एक एपीआई कुंजी भेजना पसंद करेंगे?


मेरे मार्गदर्शन में परियोजनाएं Authorization: Bearer <token>हेडर का उपयोग करती हैं और उस के साथ कभी भी कोई समस्या नहीं थी। टोकन JWT s हैं।
एंडी

1
@DavidPacker जैसा कि मैं समझता हूं, Bearerयोजना का उपयोग विशेष रूप से oAuth2 के साथ किया जाता है। इसे ओउथ ध्वनियों से अलग करके इसका दुरुपयोग करने जैसा लगता है। यदि OAuth नहीं है तो इस योजना का उपयोग करना सही क्यों है? वैसे, मुझे अपने एपीआई के लिए एक प्रकार का प्राधिकरण चुनने में परेशानी थी। API केवल एक विश्वसनीय सेवा के लिए उपलब्ध होगा, इसलिए मैंने oAuth2 के क्लाइंट क्रेडेंशियल प्रवाह की जांच की और मेरे मामले में ApiKey के साथ तुलना में कोई लाभ नहीं पाया।
रोमन जूल 20'17

@DavidPacker तब मुझे समझ में आया, कि ApiKey प्राधिकरण को एक वैध oAuth कार्यान्वयन के रूप में माना जा सकता है अगर ApiKeyइसका नाम बदल दिया गया और Access Tokenएक समाप्ति समय के बिना क्लाइंट को दी गई व्याख्या की गई। यह एक तरह का दार्शनिक पहलू है, मैंने निर्णय लिया कि यदि मेरे मामले को सरल शब्दों में वर्णित किया जा सकता है तो इसे जटिल परिभाषाओं में न लाया जाए और इसे "आपीके" कहने का निर्णय लिया जाए। यदि आपका प्रोटोकॉल oAuth standart को लागू Bearerकरता है, तो मैं उपयोग करने पर सहमत हो सकता हूं , लेकिन ऐसा नहीं है, मुझे लगता है कि इस योजना को लागू नहीं किया जा सकता है।
रोमन जूल 20'17

2
आप अपने आप को बहुत सीमित कर रहे हैं। एपीआई उपभोक्ता कम परवाह नहीं कर सकता है कि आपने OAuth को लागू किया है या नहीं। वे टोकन सुरक्षा के बारे में परवाह करते हैं, कि टोकन जारी करने वाले कार्य और वे ठीक से प्रमाणित हो सकते हैं। वे JWT प्रलेखन में बियरर का सही उपयोग करने की सलाह देते हैं । JWT बेयर स्कीमा को पूरी तरह से अच्छी तरह से फिट करता है और मैं JWT को अधिक अनुशंसित नहीं कर सकता। वे REST अनुप्रयोगों के लिए एकदम सही हैं क्योंकि आप किसी उपयोगकर्ता को डेटाबेस से टकराने के बिना भी प्रमाणित कर सकते हैं - जब तक आपको टोकन निरस्तीकरण सुविधा की आवश्यकता नहीं है।
एंडी

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

जवाबों:


14

यदि आप प्राधिकरण का उपयोग करते हैं, तो सुसंगत रहें

कुछ तर्क देंगे कि निम्नलिखित अनावश्यक है ( और बहुत समय पहले मैं उनके साथ सहमत नहीं था ) लेकिन, इन दिनों, अगर हम Authorizationहेडर का उपयोग करते हैं तो हमें टोकन के प्रकार की जानकारी देनी चाहिए , क्योंकि एपीआई कुंजी प्रति सेल्फ-वर्णनात्मक नहीं हैं 1 है

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

Authorization: Basic xxxx
Authorization: Digest xxxx
Authorization: Bearer xxxx
Authorization: ApiKey-v1 xxxx
Authorization: ApiKey-v2 xxxx

मैं इस बारे में परवाह नहीं करता था, लेकिन ऐप क्लाइंट ऐप के साथ काम करने के बाद जिनके अपडेट की गारंटी नहीं थी (मोबाइल और सेंसर ज्यादातर), मैंने शुरू किया। मैंने सुरक्षा को लागू करने के तरीके से अधिक सतर्क रहना शुरू कर दिया ताकि मैं ग्राहकों के साथ खिलवाड़ किए बिना और सर्वर की ओर से बहुत अधिक दर्द के बिना इसका विस्तार कर सकूं।

चिंताओं

मैंने अपनी योजनाओं को लागू करने में जिन समस्याओं का सामना किया है, वह एक टिप्पणी के समान है।

दूसरी ओर, मुझे एक विचार मिला कि एक कस्टम प्राधिकरण योजना कुछ ग्राहकों द्वारा अप्रत्याशित और असमर्थित हो सकती है और वैसे भी कस्टम कोड की ओर ले जा सकती है

ग्राहकों का कहना है , पुस्तकालयों, चौखटे, रिवर्स परदे के पीछे

लाभ

एक महत्वपूर्ण लाभ कैश है। साझा कैश हेडर को कैश नहीं करेगा (और यह निश्चित रूप से अच्छा है) जब तक कि आप अन्यथा न कहें।

तो प्राधिकरण या कस्टम हेडर?

अपने अनुभव के अनुसार, अपनी स्वयं की Authorizationयोजना को लागू करने से मुझे कस्टम प्राधिकारी शीर्षलेखों को लागू करने की तुलना में बहुत अधिक मात्रा में काम (या अधिक) हुआ है, डिजाइन की अधिक स्वतंत्रता और कैश पर अधिक नियंत्रण के साथ जब मैंने कस्टम हेडर का उपयोग किया है। कारण मूर्खतापूर्ण है, अधिकांश समय मेरे पास Cache-controlसेट है no-cacheया no-store, मुझे सर्वर को कॉल करने के लिए अनुमति देता है अधिक नियतात्मक (यह महत्वपूर्ण है जब यह ट्रैकिंग और परीक्षण की बात आती है) नेटवर्क की टोपोलॉजी की परवाह किए बिना।


1: मुझे यह उत्तर एपीआई कीज़ के बारे में बहुत स्पष्ट है


4
का उपयोग X-2012 के रूप में किया गया है: stackoverflow.com/a/3561399/923720
Darkhogg

1
ऑप्स! मुझे नहीं पता था। संपादित और तय।
लैव जूल

इस सवाल से पहले मैंने सोचा था कि अधिकांश लोग URL में API कुंजी रखते हैं, लेकिन इसे छिपाने के लिए HTTPS का उपयोग करते हैं। कुछ विकल्प देखने के लिए अच्छा है। : उदाहरण के लिए, Contentful प्राधिकरण या क्वेरी pamameter की अनुमति देता है contentful.com/developers/docs/references/content-delivery-api/...
user949300

1
@ user949300 ... एक एन्क्रिप्टेड साझा रहस्य (जैसे ssl में uri में एपीआई कुंजी) का उपयोग करना स्पष्ट रूप से कुछ भी नहीं की तुलना में अधिक सुरक्षित है, लेकिन अगर यह इंटरसेप्ट किया गया है और पहचानों पर कोई ग्रैन्युलैरिटी प्रदान नहीं करता है तो यह आसानी से खराब हो सकता है। मैंने मशीन से मशीन संचार के अलावा किसी भी अन्य चीज़ के लिए एपि_की का उपयोग नहीं किया है, जहां मैं भरोसेमंद पार्टियों और श्वेतसूचीबद्ध मशीन पहचानों के बीच साझा किए गए रहस्य को मेल कर रहा हूं। मशीन से मशीन कॉन करने के बाद, मानव ऑपरेटर अन्य साधनों का उपयोग करके प्रमाणित करता है।
। एलन बेट्स

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