मैं पिछले कुछ दिनों में एक साधारण एप्लिकेशन विचार के साथ घूम रहा हूं क्योंकि मैं खुद को आरईएसटी प्रमाणीकरण के मूलभूत सिखाने की कोशिश कर रहा हूं।आरईएसटी प्रमाणीकरण और एचएमएसी/निजी कुंजी (मैं इसे कब सेट करूं?)
अब तक मैंने इकट्ठा किया है कि सर्वोत्तम ऐसा करने का तरीका है एचएमएसी के कार्यान्वयन के साथ अमेज़ॅन द्वारा उपयोग किए जाने वाले।
मेरी सबसे बड़ी चिंता यह है कि मैं उपयोगकर्ता को और प्रमाणित करने का अनुमान लगाता हूं, इसलिए उन्हें अपनी निजी कुंजी दें ताकि वे एचएमएसी पर हस्ताक्षर करना शुरू कर सकें? मैं पढ़ता रहता हूं कि एचएमएसी पर हस्ताक्षर करने के लिए उपयोग की जाने वाली निजी कुंजी तार पर कभी भी पर नहीं भेजी जानी चाहिए, लेकिन फिर वे इसे पहले स्थान पर कैसे प्राप्त करते हैं?
मेरा विचार कुछ ऐसा था, लेकिन मुझे यकीन नहीं है कि यह मान्य है या नहीं। उपयोगकर्ताओं के लिए
डेटाबेस तालिका:
users (simplified, this would probably be a private key per client app?)
id (their public key?)
username
password?
privatekey
एक HTML/JS ग्राहक मान लिया जाये कि उपयोगकर्ता एक पारंपरिक प्रवेश पृष्ठ है कि कुछ इस तरह के साथ एपीआई के पोस्ट के साथ प्रस्तुत किया जाएगा:
https://example.com/myapp/api/v1/authenticate.json
POST: username/password
कि या तो
404:User not found
200:{ "id" : <id>, "privatekey": <privatekey> }
ग्राहक तब उस कुंजी को कहीं स्टोर करेगा (wou ld स्थानीय भंडारण/कुकी एक सुरक्षित जगह हो सकता है?) और इसका इस्तेमाल आगे अनुरोध किया है कि इस
GET https://example.com/myapp/api/v1/something/?key1=value1&publickey={theirID}&hmac={hmac signature of the request using their private key}
सर्वर तो सार्वजनिक कुंजी की जाँच करेगा, संबद्ध निजी कुंजी को पुनः प्राप्त और HMAC हस्ताक्षर पुनर्निर्माण लगेगा हस्ताक्षर करने के लिए, यदि वे मेल खाते हैं तो हमारे पास एक प्रमाणित अनुरोध प्रक्रिया है।
क्या मुझे यह अधिकार मिल रहा है? मुझे यकीन नहीं है कि मैं एक निजी कुंजी की भूमिका को समझता हूं अगर मुझे अभी भी मेरे उदाहरण में एक पासवर्ड चाहिए तो कुछ मुझे बता रहा है कि मैं गलत हो सकता हूं।
एपीआई कुछ नया नहीं बल्कि खुद को कुछ नया सिखाने के लिए मेरा पालतू जानवर प्रोजेक्ट है। उस अर्थ में मैं पहले एपीआई बनाने जा रहा था और फिर फ्रंटेंड का निर्माण करता था जैसे कि मैं बाहरी व्यक्ति था। प्रत्यक्ष कॉल करने के बजाय मैं केवल अपने एपीआई का उपयोग करने जा रहा था और मुझे प्रमाणीकरण का उपयोग करने की आवश्यकता थी, इस तरह मेरा अपना फ्रंटेंड बस मेरी एपीआई का उपभोग करेगा। जब आप कहते हैं कि अमेज़ॅन एस 3 आपको पंजीकरण में निजी कुंजी देता है तो मुझे लगता है कि मैं इस बारे में निश्चित नहीं था, मैं इसे तीसरे पक्ष को कब दूंगा (या इस मामले में इसे खुद को दें)। OAuth 2 भी आशाजनक दिखता है ... – jfrobishow
मुझे कोई संदेह है। अगर ग्राहक बाहरी रूप से सुलभ वेब एप्लिकेशन है, तो गुप्त कुंजी (स्थानीय रूप से या कुकीज़ में संग्रहीत) को स्रोत को देखकर अंतर्निहित जेएस फ़ाइल से देखा जा सकता है। सही? ऐसा कुछ कैसे रोका जा सकता है? –