दिलचस्प पोस्ट
अजगर पैकेज ऑफ़लाइन स्थापना एंड्रॉइड: गैलरी से लोड बिटमैप ImageView में घूम रहे हैं रिश्तेदार यूआरएल के लिए एक 302 रीडायरेक्ट वैध या अमान्य है? गिट में एक खास प्रतिबद्धता को वापस लाएं, जो कि दूरस्थ रीपो पर धकेल दिया गया है एक स्थिर वेब अनुप्रयोग में पृष्ठांकन एचबीज़ केर्बरोस कनेक्शन नवीकरण रणनीति स्ट्रेज में टिप्पणियों के लिए रेगेक्स, टिप्पणियों में तार, आदि कैश-कंट्रोल के बीच अंतर क्या है: अधिकतम-आयु = 0 और नो-कैश? XmlDocument.SelectSingleNode और xmlNamespace समस्या एनएटी में कोड का उपयोग कर डेस्कटॉप वॉलपेपर बदलें कक्षापाथ लिनक्स के तहत काम नहीं करता है मैं टीएसक्यूएल चयन में प्रत्येक पंक्ति के लिए यादृच्छिक संख्या कैसे प्राप्त करूं? इस रूबी कोड में नक्शा (और: नाम) क्या करता है? यदि आप अपने AngularJS मॉडलों में a। (Dot) का उपयोग नहीं कर रहे हैं तो आप इसे गलत कर रहे हैं? Matplotlib में, अंजीर का मतलब क्या होता है। एडी_एस्यूबप्लॉट (111)?

रसीला प्रमाणीकरण

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

वेब के समाधान से एकत्रित समाधान "रसीला प्रमाणीकरण"

एक रेंटल क्लाइंट-सर्वर आर्किटेक्चर में प्रमाणीकरण कैसे संभालना है बहस का मामला है।

सामान्यतः, यह एसओए में HTTP दुनिया के माध्यम से प्राप्त किया जा सकता है:

  • HTTPS पर HTTP मूल प्रमाण;
  • कुकीज़ और सत्र प्रबंधन;
  • HTTP शीर्षलेखों में टोकन (उदाहरण के लिए OAuth 2.0);
  • अतिरिक्त हस्ताक्षर पैरामीटर के साथ क्वेरी प्रमाणीकरण

आपको सबसे बेहतर तरीके से अपने सॉफ़्टवेयर आर्किटेक्चर से मिलान करने के लिए उन तकनीकों को अनुकूलित करना होगा या बेहतर होगा।

आपकी सुरक्षा नीति और सॉफ़्टवेयर आर्किटेक्चर के उद्देश्य के आधार पर प्रत्येक प्रमाणीकरण योजना के पास स्वयं के प्रॉसेस और कॉन्सस होते हैं।

HTTPS पर HTTP मूल प्रमाण

यह पहला समाधान, मानक HTTPS प्रोटोकॉल के आधार पर, अधिकांश वेब सेवाओं द्वारा उपयोग किया जाता है।

GET /spec.html HTTP/1.1 Host: www.example.org Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

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

हम डाइजेस्ट प्रमाणीकरण का उपयोग कर सकते हैं, लेकिन इसके लिए HTTPS भी आवश्यक है, क्योंकि यह MiM या पुनरावृत्ति के हमलों के लिए कमजोर है, और यह HTTP के लिए विशिष्ट है

कुकीज़ के माध्यम से सत्र

ईमानदारी से, सर्वर पर प्रबंधित एक सत्र वास्तव में स्टेटलेस नहीं है

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

 GET /spec.html HTTP/1.1 Host: www.example.org Cookie: theme=light; sessionToken=abc123 

कुकी तकनीक ही HTTP- लिंक है, इसलिए यह वास्तव में शांत नहीं है, जो प्रोटोकॉल-स्वतंत्र, आईएमएचओ होना चाहिए। यह MiM या रिप्ले हमलों के लिए कमजोर है।

टोकन के माध्यम से दी गई (OAuth2)

एक विकल्प HTTP शीर्षकों के भीतर एक टोकन डालना है, ताकि अनुरोध प्रमाणीकृत किया जा सके। उदाहरण के लिए OAuth 2.0 ऐसा ही है। आरएफसी 674 9 देखें:

  GET /resource/1 HTTP/1.1 Host: example.com Authorization: Bearer mF_9.B5f-4.1JqM 

संक्षेप में, यह एक कुकी के समान है, और एक ही समस्याएं हैं: हिंदुस्तानी ट्रांसमिशन विवरणों पर भरोसा नहीं करते, और कई सुरक्षा कमजोरियों के अधीन- मिम और रिप्ले सहित – तो केवल HTTPS पर ही प्रयोग किया जाता है।

क्वेरी प्रमाणीकरण

क्वेरी प्रमाणीकरण में यूआरआई पर कुछ अतिरिक्त पैरामीटर के माध्यम से प्रत्येक शोकपूर्ण अनुरोध पर हस्ताक्षर किए जाते हैं। यह संदर्भ लेख देखें।

इसे इस लेख में परिभाषित किया गया था:

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

यह तकनीक संभवत: एक स्टेटलेस आर्किटेक्चर के साथ संगत है, और इसे एक लाइट सत्र प्रबंधन (डीबी की दृढ़ता के बजाय इन-मेमोरी सत्रों का उपयोग करके) लागू किया जा सकता है।

उदाहरण के लिए, यहां ऊपर दिए गए लिंक से एक सामान्य यूआरआई नमूना है:

 GET /object?apiKey=Qwerty2010 

इस तरह संचरित होना चाहिए:

 GET /object?timestamp=1261496500&apiKey=Qwerty2010&signature=abcdef0123456789 

स्ट्रिंग जिस पर हस्ताक्षर किए जा रहे हैं /object?apikey=Qwerty2010&timestamp=1261496500 और हस्ताक्षर एपीआई कुंजी के निजी घटक का उपयोग करते हुए उस स्ट्रिंग के SHA256 हैश है।

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

JSON और REST पर आधारित हमारे क्लाइंट-सर्वर ओआरएम / एसओए / एमवीसी ढांचे में रीस्टिबल प्रमाणीकरण के बारे में कुछ विवरण के लिए यह लेख देखें। चूंकि हम केवल HTTP / 1.1 पर ही नहीं, बल्कि नामित पाइप या जीडीआई संदेश (स्थानीय रूप से) पर संचार की अनुमति देते हैं, इसलिए हमने वास्तव में रीस्टिवल प्रमाणीकरण पद्धति को लागू करने की कोशिश की, और HTTP विशिष्टता (जैसे हेडर या कुकीज़) पर भरोसा नहीं किया।

व्यवहार में, ओएयूटी 2.0 के लिए आगामी मैक टोकन प्रमाणीकरण "मौजूदा द्वारा दिए जाने वाले टोकन" के संबंध में एक बड़ा सुधार हो सकता है। लेकिन यह अभी भी एक काम प्रगति पर है, और यह HTTP ट्रांसमिशन से जुड़ा है।

निष्कर्ष

यह अनुमान लगाने योग्य है कि REST केवल HTTP- आधारित नहीं है, भले ही, व्यवहार में, यह ज्यादातर HTTP पर कार्यान्वित हुआ है बाकी अन्य संचार परतों का उपयोग कर सकते हैं इसलिए एक शख्सियत प्रमाणीकरण HTTP प्रमाणीकरण का एक पर्याय नहीं है, जो भी Google जवाब देता है इसे एचटीटीपी तंत्र का बिल्कुल भी उपयोग नहीं करना चाहिए, लेकिन संचार परत से समझाया जाना चाहिए।

मुझे वाकई संदेह है कि क्या लोग उत्साहपूर्वक "HTTP प्रमाणीकरण" को चिल्लाने के लिए कभी भी आरएएसटी के साथ एक ब्राउज़र-आधारित अनुप्रयोग (मशीन-टू-मशीन वेब सेवा के बजाय) बनाने की कोशिश करते थे – कोई भी अपराध नहीं करना – मुझे नहीं लगता कि वे कभी भी जटिलताओं का सामना करते हैं )।

समस्याओं जो मैंने एक ब्राउज़र में देखने के लिए एचटीएमएल पृष्ठों का निर्माण किया है, उन रसीद सेवाओं पर HTTP प्रमाणीकरण का उपयोग करते हुए पाया है:

  • उपयोगकर्ता आमतौर पर एक बदसूरत ब्राउज़र-निर्मित लॉगिन बॉक्स प्राप्त करता है, जो बहुत उपयोगकर्ता-मित्रतापूर्ण है। आप पासवर्ड पुनर्प्राप्ति, सहायता बॉक्स, वगैरह नहीं जोड़ सकते।
  • किसी भिन्न नाम के तहत लॉग आउट करना या लॉगिंग करना एक समस्या है – जब तक आप विंडो बंद नहीं करते हैं तब तक ब्राउज़र साइट पर प्रमाणीकरण जानकारी भेजते रहेंगे
  • टाइमआउट कठिन हैं

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

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

सिर्फ निम्नलिखित नियमों के साथ सत्र को एक सशक्त संसाधन बनाकर:

  • एक सत्र एक उपयोगकर्ता आईडी के लिए एक कुंजी को मैप करता है (और संभवत: टाइमआउट के लिए अंतिम-एक्शन-टाइमस्टैम्प)
  • यदि एक सत्र मौजूद है, तो इसका मतलब है कि कुंजी मान्य है।
  • लॉगिन का मतलब है / सत्रों के लिए पोस्टिंग, एक नई कुंजी को कुकी के रूप में सेट किया गया है
  • लॉगआउट का अर्थ है DELETEing / सत्र / {कुंजी} (अतिभारित पोस्ट के साथ, याद रखें, हम एक ब्राउज़र हैं और एचटीएमएल 5 अभी तक जाने का एक लंबा रास्ता है)
  • प्रत्येक अनुरोध पर कुकी के रूप में कुंजी भेजकर और यह पता लगाया गया है कि क्या सत्र मौजूद है और मान्य है

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

कनवर्टर 42 कहते हैं कि जब https का प्रयोग करना चाहिए (जो हमें करना चाहिए), तो यह महत्वपूर्ण है कि कुकी का अपना सुरक्षित फ्लैग सेट होगा, ताकि प्रमाणीकरण जानकारी को गैर-सुरक्षित कनेक्शन पर कभी नहीं भेजा जा सके। महान बात, मैंने इसे स्वयं नहीं देखा था

मुझे लगता है कि यह एक पर्याप्त समाधान है जो ठीक काम करता है, लेकिन मुझे यह स्वीकार करना होगा कि मैं इस योजना में संभावित छेदों की पहचान करने के लिए पर्याप्त सुरक्षा विशेषज्ञ नहीं हूं – ये सब मुझे पता है कि सैकड़ों गैर-रसीला वेब अनुप्रयोग मूलतः उसी का उपयोग करते हैं लॉगिन प्रोटोकॉल ($ _SESSION inphp, जावा ईई में एचटीटीपी सत्र, आदि)। कुकी हेडर सामग्री का प्रयोग केवल एक सर्वर-साइड संसाधन को संबोधित करने के लिए किया जाता है, बस एक स्वीकार्य भाषा की तरह अनुवाद संसाधनों आदि का उपयोग करने के लिए उपयोग किया जा सकता है। मुझे लगता है कि यह वही है, लेकिन शायद दूसरों को नहीं? तुम लोग क्या सोचते हो?

पर्याप्त पहले से ही इस विषय पर बहुत अच्छे लोगों ने कहा है। लेकिन यह मेरा 2 सेंट है

बातचीत के दो तरीके हैं:

  1. मानव-टू-मशीन (एचटीएम)
  2. मशीन-टू-मशीन (एमटीएम)

यह मशीन आम विभाजक है, जो कि बाकी एपीआई के रूप में व्यक्त की गई है, और अभिनेता / क्लाइंट या तो इंसान या मशीन हैं

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

जब हम इसे मानव-टू-मशीन एप्लिकेशन के संदर्भ में देखते हैं, "ब्राउज़र आधारित" के रूप में स्केबबेल ऊपर बताते हैं, इसका मतलब यह है कि ब्राउज़र में चलने वाले (वेब) एप्लिकेशन को प्रत्येक अनुरोध के साथ अपनी स्थिति और प्रासंगिक जानकारी भेजने की आवश्यकता होगी पीछे के अंत में बाकी एपीआई करता है

इस पर गौर करें: आपके पास डेटा / सूचना मंच है जो कि बाकी एपीआई के सेट के रूप में सामने आया है। शायद आपके पास एक आत्म-सेवा बीआई मंच है जो सभी डेटा क्यूब्स का प्रबंधन करता है लेकिन आप चाहते हैं कि आपके (मानव) ग्राहकों को यह (1) वेब ऐप, (2) मोबाइल ऐप और (3) कुछ तृतीय पक्ष एप्लिकेशन के माध्यम से एक्सेस करने के लिए अंत में, एमटीएम की श्रृंखला भी एचटीएम तक बढ़ती है – सही है इसलिए मानव उपयोगकर्ता जानकारी श्रृंखला के शीर्ष पर रहते हैं।

पहले 2 मामलों में, आपके पास मानव-टू-मशीन इंटरैक्शन के लिए एक मामला है, वास्तव में एक मानव उपयोगकर्ता द्वारा की जाने वाली जानकारी। पिछले मामले में, आपके पास एक मशीन प्रोग्राम है जो REST API का उपयोग करता है।

प्रमाणीकरण की अवधारणा बोर्ड भर में लागू होती है। आप इसे कैसे डिज़ाइन करेंगे ताकि आपके रिक्त एपीआई एक समान, सुरक्षित तरीके से एक्सेस कर सकें? जिस तरह से मैं इसे देखता हूं, वहां 2 तरीके हैं:

मार्ग-1:

  1. आरंभ करने के लिए कोई लॉगिन नहीं है हर अनुरोध लॉगिन करता है
  2. ग्राहक अपने पहचान मापदंडों को प्रत्येक अनुरोध के साथ निर्दिष्ट विशिष्ट पैरामीटर भेजता है
  3. REST एपीआई उन्हें ले जाता है, चारों ओर जाता है, उपयोगकर्ता स्टोर को पिंग करता है (जो कुछ भी है) और पुष्टि करता है कि auth
  4. यदि प्रमाणिकता की स्थापना की जाती है, तो अनुरोध पर सेवाएं; अन्यथा, उचित HTTP स्थिति कोड से इनकार करते हैं
  5. अपने कैटलॉग में सभी बाकी एपीआई पर हर अनुरोध के लिए उपरोक्त दोहराएं

मार्ग-2:

  1. ग्राहक एक auth अनुरोध के साथ शुरू होता है
  2. एक लॉगिन REST API ऐसे सभी अनुरोधों को संभालता है
  3. यह एट पैरामीटर (एपीआई कुंजी, यूआईडी / पीडब्ल्यूडी या जो भी आप चुनते हैं) में लेता है और उपयोगकर्ता स्टोर (एलडीएपी, एडी, या MySQL डीबी इत्यादि) के खिलाफ प्रमाण की पुष्टि करता है।
  4. यदि सत्यापित किया गया है, तो एक auth टोकन बनाता है और इसे ग्राहक / कॉलर पर वापस लाता है
  5. कॉलर तब इस औथ टोकन को भेजता है – अन्य व्यापारों के बाकी हर एपीआई के बाद के अनुरोध के साथ विशिष्ट पैरामीटर का अनुरोध करता है, जब तक लॉग आउट नहीं हो जाता है या पट्टे की समय सीमा समाप्त होने तक

जाहिर है, मार्ग -2 में, रीस्ट एपीआई को टोकन को पहचानने और भरोसे जाने के तरीके की आवश्यकता होगी। लॉगिन API ने सत्यापन सत्यापन किया, और इसलिए कि "वॉलेट कुंजी" को आपके कैटलॉग में अन्य बाकी एपीआई द्वारा विश्वसनीय होना चाहिए।

यह निश्चित रूप से इसका मतलब है कि AUTH कुंजी / टोकन को REST API में संग्रहीत और साझा करने की आवश्यकता होगी। यह साझा, विश्वसनीय टोकन भंडार स्थानीय / संघीय हो सकता है, जो अन्य संगठनों से REST API को एक-दूसरे पर भरोसा करने की इजाजत देता है

लेकिन मैं पीछे हटा।

मुद्दा यह है कि "राज्य" (ग्राहक की प्रमाणीकृत स्थिति के बारे में) को बनाए रखा जाना और साझा करना आवश्यक है ताकि सभी बाकी एपीआई विश्वास के एक चक्र का निर्माण कर सकें। यदि हम ऐसा नहीं करते हैं, जो रास्ता 1 है, तो हमें स्वीकार करना चाहिए कि किसी भी / सभी अनुरोधों के लिए प्रमाणीकरण का कार्य किया जाना चाहिए।

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

इतना अधिक परतें, अधिक विलंबता

अब, वे -1 लें और एचटीएम पर आवेदन करें। क्या आपका (इंसान) उपयोगकर्ता वास्तव में परवाह करता है अगर आपको यूआईडी / पीडब्ल्यूडी / हैश या हर अनुरोध के साथ जो कुछ भी भेजना है? नहीं, जब तक आप auth / login पेज हर दूसरे फेंकने से परेशान नहीं करते अगर आप ऐसा करते हैं तो अच्छे ग्राहक होने के नाते तो, आप क्या करेंगे, शुरुआत में, ब्राउजर में, क्लाइंट साइड पर कहीं से लॉगिन जानकारी को स्टोर करना है, और इसे बनाये गये हर अनुरोध के साथ भेजें (मानव) उपयोगकर्ता के लिए, वह पहले ही लॉग इन कर चुकी है, और एक "सत्र" उपलब्ध है। लेकिन वास्तव में, वह हर अनुरोध पर प्रमाणित है।

मार्ग -2 के साथ समान आपका (मानव) उपयोगकर्ता कभी भी सूचना नहीं देगा तो कोई नुकसान नहीं हुआ।

क्या होगा यदि हम एमटीएम के लिए -1 का तरीका लागू करते हैं? इस मामले में, एक मशीन के बाद से, हम इस अनुरोध के साथ प्रत्येक अनुरोध के साथ प्रमाणीकरण जानकारी सबमिट करके इस आदमी से नरक निकाल सकते हैं। किसी को परवाह नहीं! एमटीएम पर मार्ग -2 का प्रदर्शन करना किसी भी विशेष प्रतिक्रिया का उद्भव नहीं होगा; इसकी एक लानत मशीन यह कम देखभाल कर सकता है!

तो वास्तव में, सवाल यह है कि आपकी आवश्यकता के अनुरूप क्या है। स्टेटलेसनेस के पास भुगतान करने की कीमत है कीमत का भुगतान करें और आगे बढ़ें यदि आप एक प्यूरिस्ट बनना चाहते हैं, तो इसके लिए भी कीमत का भुगतान करें, और आगे बढ़ें।

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

यहां एक सही और पूरी तरह से निस्तारण प्रमाणीकरण समाधान है:

  1. प्रमाणीकरण सर्वर पर एक सार्वजनिक / निजी कुंजी जोड़ी बनाएं
  2. सार्वजनिक कुंजी को सभी सर्वर पर वितरित करें
  3. जब कोई क्लाइंट प्रमाणीकृत करता है:

    3.1। एक टोकन जारी करें जिसमें निम्न शामिल है:

    • समय सीमा समाप्ति समय
    • उपयोगकर्ता नाम (वैकल्पिक)
    • उपयोगकर्ता आईपी (वैकल्पिक)
    • एक पासवर्ड का हैश (वैकल्पिक)

    3.2। निजी कुंजी के साथ टोकन एन्क्रिप्ट करें

    3.3। एन्क्रिप्टेड टोकन को उपयोगकर्ता को वापस भेजें

  4. जब उपयोगकर्ता किसी भी एपीआई तक पहुँच जाता है, तो उन्हें अपने प्रमाणिक टोकन में भी पास करना होगा।

  5. सर्वर पुष्टि कर सकते हैं कि टोकन ऑथ सर्वर की सार्वजनिक कुंजी का उपयोग करके इसे डिक्रिप्ट करके मान्य है

यह स्टेटलेस / रेस्टाइड प्रमाणीकरण है।

ध्यान दें, यदि पासवर्ड हैश शामिल किया गया था तो उपयोगकर्ता प्रमाणीकरण टोकन के साथ अनएन्क्रिप्टेड पासवर्ड भी भेज देगा। सर्वर यह सत्यापित कर सकता है कि पासवर्ड पासवर्ड से मेल खाता है जो हैश की तुलना करके प्रमाणीकरण टोकन बनाने के लिए उपयोग किया गया था। HTTPS जैसे कुछ के ज़रिए एक सुरक्षित कनेक्शन आवश्यक होगा क्लाइंट साइड पर जावास्क्रिप्ट उपयोगकर्ता के पासवर्ड को संभालने और क्लाइंट साइड को संभाल कर सकता है, स्मृति में या कुकी में, संभवतः सर्वर की सार्वजनिक कुंजी के साथ एन्क्रिप्ट किया गया।

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

शांत दृष्टिकोण से आपकी ज़िंदगी आसान हो जाती है और ओवरहेड और सत्र की लागत कम हो जाती है, इसे पालन करने की कोशिश करें, क्योंकि यह करना एक बुद्धिमान बात है, लेकिन जिस समय आप अनुशासन (किसी भी अनुशासन / दिशानिर्देश) का चरम पर पालन करते हैं अब इसके लिए इरादा किया गया लाभ प्रदान नहीं करता है, तो आप इसे गलत कर रहे हैं कुछ सर्वोत्तम भाषाओं में आज, कार्यात्मक प्रोग्रामिंग और ऑब्जेक्ट अभिविन्यास दोनों हैं।

यदि आपकी समस्या का समाधान करने के लिए सबसे आसान तरीका है तो कुकी में प्रमाणीकरण कुंजी को संग्रहीत करना और उसे HTTP हैडर पर भेजना है, फिर करें, बस उसे दुरुपयोग न करें। याद रखें कि सत्र भारी हो जाने पर बुरा होता है, यदि आपके सत्र में सभी शामिल होते हैं तो एक छोटी सी स्ट्रिंग जिसमें कुंजी होती है, तो क्या बड़ा सौदा है?

मैं टिप्पणियों में सुधार स्वीकार करने के लिए खुले हूं, लेकिन हमारे सर्वर में हैश का बड़ा शब्दकोश रखने से बचने के लिए हमारी जिंदगी दुखी होने में मुझे अभी तक बात नहीं दिखाई देती (अभी तक)

पहला और सबसे महत्वपूर्ण, एक शोकहारा वेब सेवा स्टेटलेस है (या दूसरे शब्दों में, सत्र ) इसलिए, एक रसीला सेवा नहीं है और इसमें शामिल सत्र या कुकीज़ की कोई अवधारणा नहीं होना चाहिए। रियायत सेवा में प्रमाणन या प्रमाणीकरण करने का तरीका आरएफसी 2616 HTTP विनिर्देशों में परिभाषित HTTP प्राधिकरण हेडर का उपयोग कर रहा है। हर एकल अनुरोध में HTTP प्राधिकरण हैडर होना चाहिए, और अनुरोध को एक HTTP (SSL) कनेक्शन पर भेजा जाना चाहिए। यह प्रमाणन करने का एक सही तरीका है और एक HTTP रेस्तुरल वेब सेवाओं में अनुरोधों के प्रमाणीकरण की पुष्टि करने के लिए है। मैंने सिस्को सिस्टम पर सिस्को प्रधान प्रदर्शन प्रबंधक के लिए एक निशुल्क वेब सेवा कार्यान्वित की है। और उस वेब सेवा के भाग के रूप में मैंने प्रमाणीकरण / प्राधिकरण भी लागू किया है।

रूबेन्स गोम्स

यह निश्चित रूप से "सत्र कुंजियों" के बारे में नहीं है क्योंकि यह आम तौर पर सीज़लेस प्रमाणीकरण को संदर्भित करने के लिए प्रयोग किया जाता है जो कि बाकी की बाधाओं के दौरान किया जाता है प्रत्येक अनुरोध आत्म-वर्णन है, बिना किसी सर्वर-साइड एप्लिकेशन स्थिति के अनुरोध को प्राधिकृत करने के लिए पर्याप्त जानकारी ले रहा है।

इस तक पहुंचने का सबसे आसान तरीका आरएफसी 2617 में एचटीटीपी के अंतर्निहित प्रमाणन तंत्र से शुरू होता है।

@ स्क्रेबेल ( http://www.berenddeboer.net/rest/authentication.html ) द्वारा वर्णित 'बहुत ही विवेकपूर्ण' लेख प्रमाणीकरण की एक जटिल लेकिन वास्तव में टूटी हुई विधि की चर्चा करता है।

आप पृष्ठ पर जाने का प्रयास कर सकते हैं (जो केवल प्रमाणित उपयोगकर्ता को देखने योग्य है) http://www.berenddeboer.net/rest/site/authenticated.html बिना लॉगिन क्रेडेंशियल्स के।

(क्षमा करें मैं जवाब पर टिप्पणी नहीं कर सकता।)

मैं कहना होगा कि बाकी और प्रमाणन केवल मिश्रण नहीं है बाकी का अर्थ है स्टेटलेस लेकिन 'प्रमाणित' एक राज्य है। आप दोनों एक ही परत पर उन्हें नहीं कर सकते। यदि आप एक शोकस्थ वकील हैं और राज्यों पर भ्रूभंग करते हैं, तो आपको HTTPS के साथ जाना होगा (यानी सुरक्षा समस्या को दूसरी परत में छोड़ दें)।

I think restful authentication involves the passing of an authentication token as a parameter in the request. Examples are the use of apikeys by api's. I don't believe the use of cookies or http auth qualifies.

That's the way to do that: Using OAuth 2.0 for Login .

You may use other authentication methods other then Google's as long as it supports OAuth.

I think the following approach can be used for REST service authentication:

  1. Create a login RESTful API to accept username and password for authentication. Use HTTP POST method to prevent caching and SSL for security during transit On successful authentication, the API returns two JWTs – one access token (shorter validity, say 30 minutes) and one refresh token (longer validity, say 24 hours)
  2. The client (a web based UI) stores the JWTs in local storage and in every subsequent API call passes the access token in "Authorization: Bearer #access token" header
  3. The API checks the validity of the token by verifying the signature and expiry date. If the token is valid, check if the user (It interprets the "sub" claim in JWT as username) has access to the API with a cache lookup. If the user is authorized to access the API, execute the business logic
  4. If the token is expired, the API returns HTTP response code 400
  5. The client, on receiving 400/401, invokes another REST API with the refresh token in "Authorization: Bearer #refresh token" header to get a new access token.
  6. On receiving the call with refresh token, check if the refresh token is valid by checking the signature and the expiry date. If the refresh token is valid, refresh the access right cache of the user from DB and return access token. If the refresh token is invalid, return HTTP response code 400
  7. If a new access token is returned, go to step 2. If HTTP response code 400 is returned, the client assumes that the refresh token has expired and asks for username and password from the user
  8. For logout, purge the local storage

With this approach we are doing the expensive operation of loading the cache with user specific access right details every 30 minutes. So if an access is revoked or new access is granted, it takes 30 minutes to reflect or a logout followed by a login

To answer this question from my understanding…

An authentication system that uses REST so that you do not need to actually track or manage the users in your system. This is done by using the HTTP methods POST, GET, PUT, DELETE. We take these 4 methods and think of them in terms of database interaction as CREATE, READ, UPDATE, DELETE (but on the web we use POST and GET because that is what anchor tags support currently). So treating POST and GET as our CREATE/READ/UPDATE/DELETE (CRUD) then we can design routes in our web application that will be able to deduce what action of CRUD we are achieving.

For example, in a Ruby on Rails application we can build our web app such that if a user who is logged in visits http://store.com/account/logout then the GET of that page can viewed as the user attempting to logout. In our rails controller we would build an action in that logs the user out and sends them back to the home page.

A GET on the login page would yield a form. a POST on the login page would be viewed as a login attempt and take the POST data and use it to login.

To me, it is a practice of using HTTP methods mapped to their database meaning and then building an authentication system with that in mind you do not need to pass around any session id's or track sessions.

I'm still learning — if you find anything I have said to be wrong please correct me, and if you learn more post it back here. धन्यवाद।

Using a Public key infrastruction in which the registration of a key involves proper binding ensures that the public key is bound to the individual to which it is assigned in a way that ensures non-repudiation

See http://en.wikipedia.org/wiki/Public_key_infrastructure . If you follow the proper PKI standards, the person or agent who improperly uses the stolen key can be identified and locked out. If the agent is required to use a certificate, the binding gets pretty tight. A clever and quick-moving thief can escape, but they leave more crumbs.