प्राधिकरण HTTP हेडर को कस्टमाइज़ करें


81

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

आम तौर पर इस हेडर का उपयोग Basicऔर Digestप्रमाणीकरण के लिए किया जाता है । लेकिन मुझे नहीं पता कि क्या मुझे इस हेडर के मूल्य को कस्टमाइज़ करने और कस्टम स्कीम-स्कीम का उपयोग करने की अनुमति है, जैसे:

Authorization: Token 1af538baa9045a84c0e889f672baf83ff24

आप इसकी सिफारिश करेंगे या नहीं? या टोकन भेजने के लिए एक बेहतर तरीका है?

जवाबों:


51

आप अपने स्वयं के कस्टम स्कीमा बना सकते हैं जो Authorization:हेडर का उपयोग करते हैं - उदाहरण के लिए, यह है कि OAuth कैसे काम करता है।

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

यह कहते हुए कि, संभवतः कुकीज़ का उपयोग करना एक बेहतर विचार है, Authorization:हेडर के बजाय टोकन को प्रेषित करने के लिए, साधारण कारण से कि कुकीज़ को स्पष्ट रूप से कस्टम मानों को ले जाने के लिए डिज़ाइन किया गया था, जबकि HTTP के लिए अंतर्निहित कई तरीकों से विनिर्देश वास्तव में नहीं कहते हैं किसी भी तरह से - यदि आप वास्तव में यह देखना चाहते हैं कि यह क्या कहता है, तो यहां देखें

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


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

2
@ThomasWatson जब मैं कुकी दायरे के बिंदुओं पर आपसे असहमत नहीं हो सकता, तो यहाँ वास्तव में बात नहीं होनी चाहिए। Authorization:प्रति डोमेन HTTP प्रमाणीकरण ( हेडर का उपयोग करके ) का दायरा है । इसका मतलब यह है कि यदि आप कुकी के डोमेन को "इस डोमेन" और "/" के लिए पथ पर सेट करते हैं, तो इसका HTTP HTTP के समान समरूप क्षेत्र होगा। हालाँकि, यह वास्तव में आप पर निर्भर करता है - लेकिन जैसा कि जूलियन रेस्चके बताते हैं, आपको शायद तब तक एक नई प्रमाणीकरण योजना को परिभाषित नहीं करना चाहिए जब तक कि आप feel that you have something of generic use- कुछ ऐसा जो किसी अन्य एप्लिकेशन में उपयोग किया जा सके।
डेवग्रैंडम

8

CROSS ORIGIN अनुरोध के मामले में इसे पढ़ें:

मुझे इस स्थिति का सामना करना पड़ा और सबसे पहले मैंने Authorizationहेडर का उपयोग करने के लिए चुना और बाद में निम्नलिखित मुद्दे का सामना करने के बाद इसे हटा दिया।

Authorizationहेडर को एक कस्टम हेडर माना जाता है। इसलिए यदि Autorizationहैडर सेट के साथ क्रॉस-डोमेन अनुरोध किया जाता है , तो ब्राउज़र पहले प्रीफ़लाइट अनुरोध भेजता है । एक प्रीफ़लाइट अनुरोध विकल्प विधि द्वारा एक HTTP अनुरोध है, यह अनुरोध अनुरोध से सभी मापदंडों को हटा देता है। आपके सर्वर Access-Control-Allow-Headersको अपने कस्टम हेडर ( Authorizationहेडर) के मूल्य वाले हैडर के साथ प्रतिक्रिया करने की आवश्यकता है ।

इसलिए प्रत्येक अनुरोध के लिए ग्राहक (ब्राउज़र) भेजता है, एक अतिरिक्त HTTP अनुरोध (विकल्प) ब्राउज़र द्वारा भेजा जा रहा था। इससे मेरे एपीआई का प्रदर्शन बिगड़ गया। यह जाँचना चाहिए कि यह जोड़ने से आपके प्रदर्शन में गिरावट आ रही है या नहीं। वर्कअराउंड के रूप में मैं http मापदंडों में टोकन भेज रहा हूं, जो मुझे पता है कि यह करने का सबसे अच्छा तरीका नहीं है, लेकिन मैं प्रदर्शन के साथ समझौता नहीं कर सकता।


मैं भी सिर्फ http सत्र में अपना सत्रांक भेजने पर विचार कर रहा हूं। आप यह क्यों कहते हैं कि यह सबसे अच्छा तरीका नहीं है? ऐसा लगता है कि यह फायरवॉल स्ट्रिपिंग हेडर के खिलाफ मजबूती का लाभ है, और क्रॉस मूल प्रदर्शन में गिरावट के खिलाफ भी है। इसके नुकसान क्या हैं?
थंड

1
नुकसान केवल GET अनुरोध के मामले में है। मुझे Authorization tokenअपने एप्लिकेशन के लिए अपने (संवेदनशील डेटा) का उपयोग करके उपयोगकर्ता को प्रमाणित करना था । उसी कारण से हमें GET में संवेदनशील डेटा नहीं भेजना चाहिए, हमें परमिशन में प्राधिकरण टोकन का उपयोग नहीं करना चाहिए। W3 w3.org/Protocols/rfc2616/rfc2616-sec15.html#sec15.1.3 के अनुसार "HTTP प्रोटोकॉल SHOULD संवेदनशील डेटा जमा करने के लिए GET आधारित फ़ॉर्म का उपयोग नहीं करता है"।
अभिषेक कुमार

यदि आप हेडर पसंद नहीं करते हैं तो आप कुकीज़ को टोकन में स्टोर कर सकते हैं। (सत्र आईडी के साथ टोकन को भ्रमित न करें)। ध्यान दें कि PUT और DELETE द्वारा यह विकल्प वैसे भी भेजेगा ... ध्यान रखें कि जब आप सर्वर साइड REST क्लाइंट का उपयोग करते हैं और ब्राउज़र को बहुत अच्छा REST क्लाइंट नहीं माना जाता है।
inf3rno

5

यह थोड़ा दिनांकित है, लेकिन हो सकता है कि अन्य लोग भी इसी प्रश्न के उत्तर की तलाश में हों। आपको इस बारे में सोचना चाहिए कि आपके एपीआई के लिए कौन से सुरक्षा स्थान हैं। उदाहरण के लिए, आप अपने एपीआई को ज्ञात, पंजीकृत ग्राहक अनुप्रयोगों के लिए उनके उपयोग को प्रतिबंधित करने के लिए क्लाइंट एप्लिकेशन एक्सेस की पहचान करना और प्रमाणित करना चाह सकते हैं। इस मामले में, आप का उपयोग कर सकते हैंBasicक्लाइंट पहचानकर्ता के साथ प्रमाणीकरण योजना उपयोगकर्ता-आईडी और क्लाइंट ने पासवर्ड के रूप में गुप्त साझा की। आपको मालिकाना प्रमाणीकरण योजनाओं की आवश्यकता नहीं है बस स्पष्ट रूप से प्रत्येक सुरक्षा स्थान के लिए ग्राहकों द्वारा उपयोग की जाने वाली पहचानें। मैं प्रत्येक सुरक्षा स्थान के लिए केवल एक को प्राथमिकता देता हूं, लेकिन HTTP मानक प्रत्येक डब्ल्यूडब्ल्यूडब्ल्यू-ऑथेंटिकेट हेडर प्रतिक्रिया और प्रत्येक डब्ल्यूडब्ल्यूडब्ल्यू-ऑथेंटिकेट हेडर में प्रत्येक प्रतिक्रिया में दोनों कई प्रमाणीकरण योजनाओं की अनुमति देते हैं; यह API क्लाइंट के लिए भ्रमित करने वाला होगा कि कौन से विकल्प का उपयोग करना है। सुसंगत और स्पष्ट रहें तो आपके एपीआई का उपयोग किया जाएगा।


2

मैं अनुशंसा करूंगा कि कस्टम स्कीम नामों के साथ HTTP प्रमाणीकरण का उपयोग न करें। यदि आपको लगता है कि आपके पास कुछ सामान्य उपयोग है, तो आप एक नई योजना को परिभाषित कर सकते हैं, हालांकि। देखें http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p7-auth-latest.html#rfc.section.2.3 जानकारी के लिए।


लिंक करने के लिए दस्तावेज़ HTTP / 1.1 का एक मसौदा है। मैं अंतिम मानक में देखने की कोशिश कर रहा हूं और मुझे इस बारे में कुछ नहीं मिल रहा है कि मुझे कस्टम स्कीम रजिस्टर करनी है। क्या यह सिर्फ यह नहीं हो सकता है कि प्रारूपण प्रक्रिया के दौरान, वे डिफ़ॉल्ट योजनाओं को खोजना और सहमत करना चाहते थे?
थॉमस वॉटसन

थॉमस, जिस दस्तावेज़ का मैंने उल्लेख किया है वह RFCs 2616/7 (जिसमें योजनाओं के लिए रजिस्ट्री नहीं थी) का संशोधन है। यह कार्य प्रगति पर है, लेकिन पूरा होने के करीब है।
जूलियन रेसके

1

पोस्टमैन पर नीचे की कोशिश करें: -

हेडर सेक्शन उदाहरण में मेरे लिए काम करते हैं ..

प्राधिकरण: JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9।eyIkX18iOnsic3RyaWN0TW9kZSI6dHJ1ZSwiZ2V0dGVycyI6e30sIndhc1BvcHVsYXRlZCI6ZmFsc2UsImFjdGl2ZVBhdGhzIjp7InBhdGhzIjp7InBhc3N3b3JkIjoiaW5pdCIsImVtYWlsIjoiaW5pdCIsIl9fdiI6ImluaXQiLCJfaWQiOiJpbml0In0sInN0YXRlcyI6eyJpZ25vcmUiOnt9LCJkZWZhdWx0Ijp7fSwiaW5pdCI6eyJfX3YiOnRydWUsInBhc3N3b3JkIjp0cnVlLCJlbWFpbCI6dHJ1ZSwiX2lkIjp0cnVlfSwibW9kaWZ5Ijp7fSwicmVxdWlyZSI6e319LCJzdGF0ZU5hbWVzIjpbInJlcXVpcmUiLCJtb2RpZnkiLCJpbml0IiwiZGVmYXVsdCIsImlnbm9yZSJdfSwiZW1pdHRlciI6eyJkb21haW4iOm51bGwsIl9ldmVudHMiOnt9LCJfZXZlbnRzQ291bnQiOjAsIl9tYXhMaXN0ZW5lcnMiOjB9fSwiaXNOZXciOmZhbHNlLCJfZG9jIjp7Il9fdiI6MCwicGFzc3dvcmQiOiIkMmEkMTAkdTAybWNnWHFjWVQvdE41MlkzZ2l3dVROd3ZMWW9ZTlFXejlUcThyaDIwR09IMlhHY3haZWUiLCJlbWFpbCI6Im1hZGFuLmRhbGUxQGdtYWlsLmNvbSIsIl9pZCI6IjU5MjEzYzYyYWM2ODZlMGMyNzI2MjgzMiJ9LCJfcHJlcyI6eyIkX19vcmlnaW5hbF9zYXZlIjpbbnVsbCxudWxsLG51bGxdLCIkX19vcmlnaW5hbF92YWxpZGF0ZSI6W251bGxdLCIkX19vcmlnaW5hbF9yZW1vdmUiOltudWxsXX0sIl9wb3N0cyI6eyIkX19vcmlnaW5hbF9zYXZlIjpbXSwiJF9fb3JpZ2luYWxfdmFsaWRhdGUiOltdLCIkX19vcmlnaW5hbF9yZW1vdmUiOltdfSwiaWF0IjoxNDk1MzUwNzA5LCJleHAiOjE0OTUzNjA3ODl9.BkyB0LjKB4FIsCtnM5FcpcBLvKed_j7rCCxZddwiYnU


1
क्या आप वास्तव में JWT में पासवर्ड / हैश भेज रहे हैं? यह एक साधारण बेस 64 है।
जाखड़

1
@ ज़ाखर: एसपीए की ओर से सत्र के भंडारण की आवश्यकता को दूर करते हुए, एसपीए के लिए पूरे उपयोगकर्ता सत्र को JWT (क्योंकि यह एक पूर्ण json दस्तावेज़ है) के लिए इनका उपयोग करना है।
काउबर्ट

@ जेकबर्ट: मुझे यकीन नहीं है कि यह जेडब्ल्यूटी में सत्र के टोकन के कुछ प्रकार से अधिक कुछ करने के लिए विशिष्ट है (उदाहरण के लिए इस पोस्ट को देखें )।
अलेक्जेंडर अबाकुमोव

1
@AlexanderAbakumov उस लेख को गुमराह करने से भरा है, उसे कुछ अंक मिले हैं, लेकिन उसके बहुत सारे बिंदुओं का कोई मतलब नहीं है और फिर वह बिना किसी कारण के खिलाफ है, मैं बता सकता हूं कि वह सिर्फ कुकीज़ से प्यार करता है और मुझे लगता है कि उसे कुछ पाने की जरूरत है बेकरी और उनके लेख को ठीक करें, मुझे बहुत सारी स्थितियां मिलीं कि मैंने काम के दिनों में कुकीज़ और कचरे का इस्तेमाल किया, लोकलस्टोरेज के साथ JWT ने मुझे बहुत सिरदर्द और समय बचाया, यह सिर्फ 2 घंटे का काम और धमाके है, इसे फिर कभी न देखें। मुझे आश्चर्य है कि अगर उसने कभी एक मोबाइल ऐप विकसित किया है, तो ब्राउज़र को कसकर प्रतिबंधित सुरक्षा नियमों और इसी तरह की कोशिश की।
अल-मोतफर

@ अल Mothafar: मैं अगर आप की तरह अपने बयान पर विस्तार की सराहना करेंगे that article full of misleadings, a lot of his points does not make senseकिसी तरह से, आदि (जिसका अर्थ है, यह शायद एक टिप्पणी से परे कुछ यहाँ)। शायद आप एक उत्तर या एक ब्लॉग पोस्ट लिख सकते हैं? तर्कों की तुलना करना वास्तव में दिलचस्प होगा।
अलेक्जेंडर अबाकुमोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.