मैं एक REST API विकसित कर रहा हूं, जिसे प्रमाणीकरण की आवश्यकता है। क्योंकि प्रमाणीकरण स्वयं HTTP पर एक बाहरी वेब सेवा के माध्यम से होता है, इसलिए मैंने तर्क दिया कि हम प्रमाणीकरण सेवा को बार-बार कॉल करने से बचने के लिए टोकन भेजेंगे। जो मुझे मेरे पहले सवाल पर बड़े करीने से लाता है:
क्या यह वास्तव में केवल क्लाइंट के लिए प्रत्येक अनुरोध पर HTTP बेसिक ऑथेंटिकेशन का उपयोग करने और प्रमाणीकरण सेवा सर्वर-साइड पर कॉल करने से बेहतर है?
बेसिक ऑथ सॉल्यूशन का फ़ायदा है कि कंटेंट के लिए रिक्वेस्ट शुरू होने से पहले सर्वर को फुल राउंड-ट्रिप की ज़रूरत नहीं है। टोकन संभावित रूप से अधिक लचीले हो सकते हैं (यानी केवल विशेष संसाधनों या कार्यों के लिए अधिकार प्रदान करते हैं), लेकिन यह मेरे सरल उपयोग मामले की तुलना में OAuth संदर्भ के लिए अधिक उपयुक्त लगता है।
वर्तमान में टोकन इस तरह हासिल किए जाते हैं:
curl -X POST localhost/token --data "api_key=81169d80...
&verifier=2f5ae51a...
×tamp=1234567
&user=foo
&pass=bar"
api_key
, timestamp
और verifier
सभी अनुरोधों के लिए आवश्यक हैं। "सत्यापनकर्ता" द्वारा लौटाया जाता है:
sha1(timestamp + api_key + shared_secret)
मेरा इरादा केवल ज्ञात पार्टियों से कॉल की अनुमति देना है, और कॉल को पुन: उपयोग करने से रोकने के लिए है।
क्या यह काफी अच्छा है? Underkill? Overkill?
हाथ में एक टोकन के साथ, ग्राहक संसाधनों का अधिग्रहण कर सकते हैं:
curl localhost/posts?api_key=81169d80...
&verifier=81169d80...
&token=9fUyas64...
×tamp=1234567
सबसे सरल कॉल संभव के लिए, यह एक प्रकार की भयावह क्रिया है। यह देखते हुए कि shared_secret
(न्यूनतम) एक iOS एप्लिकेशन में विंड को एम्बेड किया जा रहा है, जिससे मुझे लगता है कि इसे निकाला जा सकता है, क्या यह सुरक्षा की झूठी भावना से परे कुछ भी पेश कर रहा है?