अवलोकन
मैं अपने एप्लिकेशन के लिए (REST) API बनाना चाह रहा हूं। प्रारंभिक / प्राथमिक उद्देश्य मोबाइल एप्लिकेशन (iPhone, Android, सिम्बियन, आदि) द्वारा खपत के लिए होगा। मैं वेब-आधारित एपीआई (अन्य कार्यान्वयनों का अध्ययन करके) प्रमाणीकरण और प्रमाणीकरण के लिए विभिन्न तंत्रों में देख रहा हूं। मैंने अपना सिर ज्यादातर मूलभूत अवधारणाओं के आसपास लपेट लिया है, लेकिन अभी भी कुछ क्षेत्रों में मार्गदर्शन की तलाश कर रहा हूं। आखिरी चीज जो मैं करना चाहता हूं, वह पहिया को फिर से मजबूत करना है, लेकिन मुझे कोई भी मानक समाधान नहीं मिल रहा है जो मेरे मानदंड को फिट करता है (हालांकि मेरे मानदंड मेरे भ्रामक हैं इसलिए समीक्षकों के लिए स्वतंत्र महसूस करते हैं)। इसके अतिरिक्त, मैं चाहता हूं कि एपीआई सभी प्लेटफार्मों / अनुप्रयोगों के लिए समान हो।
oAuth
मैं आगे जाऊंगा और अपनी आपत्ति को oAuth पर फेंक दूंगा क्योंकि मुझे पता है कि संभवतः पहला समाधान पेश किया जाएगा। मोबाइल एप्लिकेशन (या अधिक विशेष रूप से गैर-वेब एप्लिकेशन) के लिए, प्रमाणीकरण के लिए आवेदन को छोड़ना (वेब-ब्राउज़र में जाना) बस गलत लगता है। इसके अतिरिक्त, ब्राउज़र को एप्लिकेशन (विशेष रूप से क्रॉस-प्लेटफ़ॉर्म) पर कॉलबैक वापस करने के लिए कोई रास्ता नहीं है (मुझे पता है)। मुझे पता है कि ऐसा करने वाले कुछ ऐप हैं, लेकिन यह सिर्फ गलत लगता है और एप्लिकेशन UX में ब्रेक देता है।
आवश्यकताएँ
- उपयोगकर्ता आवेदन में उपयोगकर्ता नाम / पासवर्ड दर्ज करता है।
- हर एपीआई कॉल की पहचान कॉलिंग एप्लिकेशन द्वारा की जाती है।
- ओवरहेड को न्यूनतम तक रखा जाता है और डेवलपर्स के लिए सामान्य पहलू सहज होता है।
- तंत्र दोनों अंतिम उपयोगकर्ता (उनके लॉगिन क्रेडेंशियल उजागर नहीं होते हैं) और साथ ही डेवलपर (उनके आवेदन क्रेडेंशियल्स उजागर नहीं किए जाते हैं) के लिए सुरक्षित है।
- यदि संभव हो, तो https की आवश्यकता नहीं है (किसी भी तरह से एक कठिन आवश्यकता नहीं है)।
कार्यान्वयन पर मेरे वर्तमान विचार
एक बाहरी डेवलपर एक एपीआई खाते का अनुरोध करेगा। उन्हें एक माफी और अपीस्त प्राप्त होगी। हर अनुरोध को न्यूनतम तीन मापदंडों की आवश्यकता होगी।
- apikey - regisration में डेवलपर को दिया गया
- टाइमस्टैम्प - किसी दिए गए एपिक के लिए प्रत्येक संदेश के लिए एक अद्वितीय पहचानकर्ता के रूप में डबल्स
- हैश - टाइमस्टैम्प + एपिसिस्रेट का हैश
अनुरोध जारी करने वाले आवेदन की पहचान करने के लिए माफी की आवश्यकता है। टाइमस्टैम्प oauth_nonce के समान कार्य करता है और फिर से हमलों को रोकता / मिटता है। हैश सुनिश्चित करता है कि अनुरोध वास्तव में दिए गए एपिक के मालिक से जारी किया गया था।
प्रामाणिक अनुरोधों के लिए (उपयोगकर्ता की ओर से किए गए), मैं अभी भी एक्सेस_टोकन मार्ग या उपयोगकर्ता नाम और पासवर्ड हैश कॉम्बो के साथ जाने के बीच अनिर्दिष्ट हूं। किसी भी तरह, कुछ बिंदु पर एक उपयोगकर्ता नाम / पासवर्ड कॉम्बो की आवश्यकता होगी। इसलिए जब यह होता है, तो सूचनाओं के कई टुकड़ों (apikey, apisecret, टाइमस्टैम्प) + का एक हैश इस्तेमाल किया जाता है। मुझे इस पहलू पर प्रतिक्रिया मिलेगी। FYI करें, उन्हें पहले पासवर्ड हैश करना होगा, क्योंकि मैं अपने सिस्टम में हैशिंग के बिना पासवर्ड स्टोर नहीं करता।
निष्कर्ष
FYI करें, यह केवल एपीआई के निर्माण / संरचना करने के लिए अनुरोध नहीं है कि केवल एक आवेदन के भीतर प्रमाणीकरण और प्राधिकरण से कैसे निपटें।
रैंडम विचार / बोनस प्रश्न
एपीआई के लिए जिन्हें केवल अनुरोध के हिस्से के रूप में एक माफी की आवश्यकता होती है, आप किसी अन्य व्यक्ति को माफी के मालिक के अलावा कैसे रोक सकते हैं ताकि आप माफी को देखने में सक्षम हो (क्योंकि स्पष्ट में भेजा गया है) और उपयोग सीमाओं पर उन्हें धकेलने के लिए अत्यधिक अनुरोध करें? हो सकता है कि मैं यह सोचकर ही खत्म हो जाऊं, लेकिन क्या यह प्रमाणित करने के लिए कुछ नहीं होना चाहिए कि माफी मालिक से अनुरोध को सत्यापित किया गया था? मेरे मामले में, यह एपिसिट्रेट का उद्देश्य था, इसे कभी भी हैश किए बिना दिखाया / प्रसारित नहीं किया गया।
हैश की बात करते हुए, md5 बनाम hmac-sha1 के बारे में क्या? क्या यह वास्तव में मायने रखता है जब सभी मान पर्याप्त रूप से लंबे डेटा (यानी। एपिसेक्रेट) के साथ हैशेड हो।
मैं पहले अपने उपयोगकर्ता पासवर्ड हैश में प्रति उपयोगकर्ता / पंक्ति नमक जोड़ने पर विचार कर रहा था। यदि मैं ऐसा कर रहा था, तो कैसे इस्तेमाल किए गए नमक को जानने के बिना आवेदन एक मेल खाने वाले हैश बनाने में सक्षम हो सकता है?