मुझे विशेष रूप से दिलचस्पी है कि उपयोगकर्ता किसी वेब एपीआई पर अधिकृत / प्रमाणित संचालन कैसे करते हैं।
प्रमाणीकरण कुकीज़ REST दर्शन के साथ संगत हैं, और क्यों?
मुझे विशेष रूप से दिलचस्पी है कि उपयोगकर्ता किसी वेब एपीआई पर अधिकृत / प्रमाणित संचालन कैसे करते हैं।
प्रमाणीकरण कुकीज़ REST दर्शन के साथ संगत हैं, और क्यों?
जवाबों:
एक आदर्श रीस्टफुल सेवा ग्राहकों को (जो ब्राउज़र में नहीं हो सकती है) एक अनुरोध में किसी भी आवश्यक कार्य को करने की अनुमति देती है ; क्योंकि क्लाइंट के पास उस सर्वर के नहीं बल्कि पूरे स्टेट की जरूरत होती है। चूंकि क्लाइंट के पास राज्य का पूर्ण नियंत्रण है, इसलिए यह राज्य को अपने दम पर बना सकता है (यदि वह वैध है), और केवल "एर 'करने के लिए एपीआई से बात करें।"
कुकीज़ की आवश्यकता है कि मुश्किल बना सकते हैं। ब्राउज़रों के अलावा ग्राहकों के लिए, कुकीज़ का प्रबंधन करना क्वेरी परम, सादे अनुरोध हेडर या अनुरोध निकाय की तुलना में एक बहुत बड़ी असुविधा है। दूसरी ओर, ब्राउज़र में, कुकीज़ का उपयोग करने से बहुत सारी चीजें सरल हो सकती हैं।
इसलिए एक API को सबसे पहले Authorization
प्रमाणीकरण डेटा के लिए शीर्ष लेख में दिखना चाहिए, क्योंकि संभवतः वह स्थान है जहां गैर-ब्राउज़र क्लाइंट इसे रखना पसंद करेंगे, लेकिन ब्राउज़र-आधारित क्लाइंट को सरल और सुव्यवस्थित करना, यह एक सत्र कुकी के लिए भी जाँच कर सकता है। सर्वर साइड के लिए लॉग इन करें, लेकिन केवल तभी जब नियमित Authorization
हेडर गायब था।
एक अन्य उदाहरण एक जटिल अनुरोध हो सकता है जिसे आम तौर पर बहुत सारे मापदंडों की आवश्यकता होती है। एक गैर-इंटरएक्टिव क्लाइंट को एक अनुरोध में सभी डेटा को जाम करने में कोई परेशानी नहीं होगी, लेकिन एक HTML फॉर्म आधारित इंटरफ़ेस कई पेजों में अनुरोध को तोड़ने के लिए पसंद कर सकता है (कुछ 'विज़ार्ड के पृष्ठों का सेट') ताकि उपयोगकर्ता प्रस्तुत न हों उन विकल्पों के साथ जो पिछले चयनों के आधार पर लागू नहीं होते हैं। सभी मध्यवर्ती पृष्ठ क्लाइंट साइड कुकीज़ में मूल्यों को संग्रहीत कर सकते हैं, ताकि केवल बहुत ही अंतिम पृष्ठ, जहां उपयोगकर्ता वास्तव में अनुरोध को सबमिट करता है, किसी भी सर्वर साइड इफेक्ट का सभी पर प्रभाव पड़ता है। एपीआई अनुरोध निकाय में आवश्यक विशेषताओं की तलाश कर सकता है, और यदि आवश्यक पैरामीटर नहीं थे, तो कुकीज़ को देखने के लिए वापस गिर जाएं।
संपादित करें: नीचे @ कोनराड की टिप्पणी में आरई:
तुलना में टोकन विशेष रूप से लागू करने के लिए कठिन हैं क्योंकि आप उन्हें कहीं भी संग्रहीत किए बिना टोकन को आसानी से अमान्य नहीं कर सकते।
एर ... आप सर्वर साइड पर कुकीज़ को मान्य कर रहे हैं, है ना? सिर्फ इसलिए कि आपने ब्राउज़र को 24 घंटे के बाद कुकी छोड़ने के लिए कहा था इसका मतलब यह नहीं है। उस कुकी को एक उच्च तकनीकी उपयोगकर्ता द्वारा बचाया जा सकता है और "एक्सपायर" होने के लंबे समय बाद पुन: उपयोग किया जा सकता है।
यदि आप सर्वर साइड पर सत्र डेटा संग्रहीत नहीं करना चाहते हैं, तो आपको इसे टोकन (कुकी या अन्यथा) में संग्रहीत करना चाहिए। एक आत्म निहित टोकन को कभी-कभी Macaroon कहा जाता है । यह क्लाइंट और सर्वर के बीच कैसे पारित किया जाता है (चाहे कुकी द्वारा, अतिरिक्त हेडर के रूप में, या अनुरोध इकाई में ही) प्रमाणीकरण तंत्र से पूरी तरह से स्वतंत्र है।
HttpClient
.NET में आप बिना किसी समस्या के कुकीज़ का उपयोग कर सकते हैं और आपको वास्तव में इसके बारे में सोचने की आवश्यकता नहीं है। तुलना में टोकन कठिन हैं विशेष रूप से लागू करने के लिए क्योंकि आप आसानी से टोकन को कहीं भी संग्रहीत किए बिना अमान्य नहीं कर सकते।
curl
या wget
, कुकी प्रबंधित सुंदर रफ़ू असुविधाजनक है और आप वास्तव में उनके बारे में एक गुच्छा लगता है की क्या ज़रूरत है। मैंने अपना उत्तर संपादित करके आपके दूसरे बिंदु पर जवाब दिया।
हां और नहीं - यह निर्भर करता है कि आप इसका उपयोग कैसे करते हैं।
कुकीज़ अगर क्लाइंट के लिए, क्लाइंट के लिए और क्लाइंट द्वारा क्लाइंट की स्थिति बनाए रखने के लिए उपयोग की जाती हैं, तो वे आराम कर रहे हैं।
यदि आप सर्वर स्टेट को कुकी में स्टोर कर रहे हैं तो आप मूल रूप से लोड को क्लाइंट को शिफ्ट कर रहे हैं - जो कि आरामदायक नहीं है।
तो कुछ उदाहरण क्या हैं?
शोकहारा:
आराम नहीं:
बेचैनी से आराम मिलता है - सर्वर का। ग्राहक एप्लिकेशन स्थिति बनाए रख सकते हैं और सर्वर को यह कहने के लिए भेज सकते हैं कि वे कहां हैं ताकि सर्वर यह तय कर सके कि वहां से कहां जाना है। मूल रूप से सत्र / राज्यों को ऐतिहासिक डेटा की आवश्यकता होती है और यह बोलने के लिए पिछले अनुरोधों पर निर्भर होता है, बाकी एप्लिकेशन आदर्श रूप से नहीं हैं (यदि आप लॉगिन स्क्रीन के लिए जा रहे हैं तो यह 100% शुद्ध आरामदायक एप्लिकेशन के लिए व्यवहार्य नहीं है :)
एक कुकीज़ का उपयोग कर सकते हैं। REST उन्हें अनुमति देता है।
आरईएसटी की आवश्यकता है कि किसी भी सत्र की जानकारी ग्राहक की ओर से संग्रहीत की जानी चाहिए, लेकिन जब प्रमाणीकरण की बात आती है, तो कुछ जानकारी को सुरक्षा कारणों से सर्वर साइड पर रहना पड़ता है।
मेरे एक ब्लॉग पोस्ट से , एक सामान्य सहमति है कि प्रमाणीकरण डेटा को REST के बारे में गुंजाइश से बाहर माना जाता है। इसलिए, इस सत्र के कुछ आंकड़ों को अपनी ओर रखना सर्वरों के लिए ठीक है।