2013-06-30 4 views
10

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

अब तक मैंने इकट्ठा किया है कि सर्वोत्तम ऐसा करने का तरीका है एचएमएसी के कार्यान्वयन के साथ अमेज़ॅन द्वारा उपयोग किए जाने वाले।

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

मेरा विचार कुछ ऐसा था, लेकिन मुझे यकीन नहीं है कि यह मान्य है या नहीं। उपयोगकर्ताओं के लिए

डेटाबेस तालिका:

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 हस्ताक्षर पुनर्निर्माण लगेगा हस्ताक्षर करने के लिए, यदि वे मेल खाते हैं तो हमारे पास एक प्रमाणित अनुरोध प्रक्रिया है।

क्या मुझे यह अधिकार मिल रहा है? मुझे यकीन नहीं है कि मैं एक निजी कुंजी की भूमिका को समझता हूं अगर मुझे अभी भी मेरे उदाहरण में एक पासवर्ड चाहिए तो कुछ मुझे बता रहा है कि मैं गलत हो सकता हूं।

उत्तर

11

मुझे लगता है कि आपको अपने आवेदन के बारे में अधिक जानकारी प्रदान करने की आवश्यकता है और इसका उपयोग कैसे किया जाएगा। आरईएसटी प्रमाणीकरण करने के कई तरीके हैं। उनमें से कुछ मानक हैं, कुछ नहीं। ये सिर्फ कुछ उदाहरण हैं: (OAuth 2, SPNEGO, विभिन्न एसटीएस)

  • HMAC
  • क्लाइंट SSL प्रमाणपत्र
  • हस्ताक्षर/एन्क्रिप्टेड टोकन प्रमाणीकरण की

    1. Basic authentication over SSL
    2. Digest authentication
    3. विभिन्न प्रकार कुकीज़।

    अमेज़ॅन एस 3 के मामले में, जब आप पंजीकरण करते हैं तो वे आपको "एडब्ल्यूएस गुप्त पहुंच कुंजी" देते हैं। बाद में आपके एप्लिकेशन कोड को हस्ताक्षर की गणना करने में सक्षम होने के लिए गुप्त कुंजी पता होना चाहिए (या इसे हस्ताक्षरित अनुरोध/यूआरएल जानने की आवश्यकता है) तो आखिरकार पंजीकरण के दौरान कम से कम एक बार "गुप्त पहुंच कुंजी" तार पर प्रसारित हो जाती है।

    आप सार्वजनिक कुंजी क्रिप्टोग्राफी (क्लाइंट SSL प्रमाणपत्र की तरह) का उपयोग करते हैं - आप निजी कुंजी संचारण पूरी तरह

    1. आप क्लाइंट पर सार्वजनिक/निजी कुंजी उत्पन्न से बच सकते हैं
    2. सर्वर से सार्वजनिक कुंजी जमा करें (या प्रमाण पत्र विश्वसनीय प्राधिकारी द्वारा हस्ताक्षरित)
    3. निजी कुंजी और सर्वर के साथ साइन अनुरोध (या nonces) सार्वजनिक कुंजी का उपयोग करके हस्ताक्षर मान्य करता है।

    यदि आपका लक्ष्य लॉग इन पेज पर प्रमाणित होने के बाद आपकी साइट पर किए गए AJAX अनुरोधों को प्रमाणित करना है - तो आप बस सर्वर हस्ताक्षरित कुकीज़ का उपयोग कर सकते हैं।

  • +0

    एपीआई कुछ नया नहीं बल्कि खुद को कुछ नया सिखाने के लिए मेरा पालतू जानवर प्रोजेक्ट है। उस अर्थ में मैं पहले एपीआई बनाने जा रहा था और फिर फ्रंटेंड का निर्माण करता था जैसे कि मैं बाहरी व्यक्ति था। प्रत्यक्ष कॉल करने के बजाय मैं केवल अपने एपीआई का उपयोग करने जा रहा था और मुझे प्रमाणीकरण का उपयोग करने की आवश्यकता थी, इस तरह मेरा अपना फ्रंटेंड बस मेरी एपीआई का उपभोग करेगा। जब आप कहते हैं कि अमेज़ॅन एस 3 आपको पंजीकरण में निजी कुंजी देता है तो मुझे लगता है कि मैं इस बारे में निश्चित नहीं था, मैं इसे तीसरे पक्ष को कब दूंगा (या इस मामले में इसे खुद को दें)। OAuth 2 भी आशाजनक दिखता है ... – jfrobishow

    +0

    मुझे कोई संदेह है। अगर ग्राहक बाहरी रूप से सुलभ वेब एप्लिकेशन है, तो गुप्त कुंजी (स्थानीय रूप से या कुकीज़ में संग्रहीत) को स्रोत को देखकर अंतर्निहित जेएस फ़ाइल से देखा जा सकता है। सही? ऐसा कुछ कैसे रोका जा सकता है? –

    संबंधित मुद्दे