REST API के लिए डिजाइनिंग प्रमाणीकरण


11

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

मैं आवेदन स्टैक के बारे में निम्नलिखित तथ्यों के आधार पर इसे लेकर आ रहा हूं:

  1. क्लाइंट और सर्वर .NET 4 में हैं (क्लाइंट प्रोफाइल में ग्राहक का हिस्सा)
  2. सर्वर WCF REST का उपयोग करता है
  3. मैं वास्तव में ऐप में उपयोगकर्ता का नाम और पासवर्ड स्मृति में नहीं रखना चाहता हूं

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

  1. इससे पहले कि ग्राहक प्रमाणित करने का प्रयास करे, यह ECDiffieHellmanCngवर्ग का उपयोग करके एक डिफि-हेलमैन कुंजी युग्म उत्पन्न करता है ।
  2. यह उपयोगकर्ता के नाम और पासवर्ड (निश्चित रूप से HTTPS से अधिक) के साथ तार के ऊपर की जोड़ी का सार्वजनिक भाग भेजता है।
  3. सर्वर उपयोगकर्ता नाम / पासवर्ड संयोजन को प्रमाणित करता है, यदि सफल होता है, तो यह निम्न कार्य करता है:
    1. एक अद्वितीय सत्र टोकन बनाता है
    2. अपनी स्वयं की डीएच कुंजी जोड़ी बनाता है, और क्लाइंट द्वारा प्रदान की गई सार्वजनिक कुंजी से साझा रहस्य की गणना करता है
    3. अपने डेटाबेस में सत्र टोकन, साझा किए गए रहस्य, उपयोगकर्ता और "अंतिम क्रिया" समय (रोलिंग समाप्ति विंडो के लिए उपयोग किया गया) पर ध्यान देता है
    4. सत्र टोकन लौटाता है, इसकी सार्वजनिक डीएच कुंजी, और एक प्रमाणीकरण सफलता संदेश
  4. क्लाइंट प्रतिक्रिया से डीएच कुंजी लेता है, साझा रहस्य की गणना करता है, और टोकन और मेमोरी दोनों को मेमोरी में संग्रहीत करता है।

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

मुझे कोई स्पष्ट दोष नहीं दिख रहा है, और शायद इसके लिए अति-इंजीनियर है, लेकिन मुझे यह सीखने की आवश्यकता है कि किसी बिंदु पर यह कैसे किया जाए। HMAC रिप्ले हमलों को रोकता है, DH बातचीत MITM हमलों को रोकने में मदद करता है (मैं HMAC / DH के बीच अपने सिर के ऊपर से एक व्यावहारिक हमले के बारे में सोच भी नहीं सकता)।

किसी भी छेद किसी को भी इस में प्रहार कर सकते हैं?


मैं यह नहीं देखता कि डीएच कीज़ को कैसे जेनरेट किया जाता है, सभी जगह HTTPS का उपयोग करने और सादे पुराने सत्र कुकी का उपयोग करने की तुलना में किसी भी सुरक्षा को जोड़ा जाता है। जब ठीक से उपयोग किया जाता है, तो HTTPS पहले से ही मानव-में-मध्य और फिर से खेलना हमलों से बचाता है।
रेयान

जवाबों:


5

अपना खुद का आविष्कार करने के बजाय, आपको ओपनैम एपीआई को पढ़ने और इसे उधार लेने पर विचार करना चाहिए।

http://forgerock.com/openam.html

OpenAM Wiki विशेष रूप से सहायक है

https://wikis.forgerock.org/confluence/display/openam/Home

आपको उनके घटकों का उपयोग करने की आवश्यकता नहीं है। लेकिन अगर आप उनके एपीआई का उपयोग करते हैं, तो आप पाएंगे कि लंबे समय में आपका जीवन सरल हो जाएगा।


हम्म, यह बुरा नहीं लगता, एक बात जो मुझे इस मामले में इसका उपयोग करने से रोक रही है: हम एक .Net दुकान हैं। इसके अलावा, WCF सर्वर साइड चीजों के साथ इसका उपयोग करने के बारे में बहुत कुछ नहीं है। एक गैर-स्पैम लिंक जिसे मैं Google पर पा सकता था वह WIF और WS-Federation का उपयोग करने के लिए इंगित करता है।
मैट सीकर

1
@ मैट सिकर: "आपको उनके घटकों का उपयोग करने की आवश्यकता नहीं है"। कृपया अपने स्वयं के आविष्कार के बजाय उनके एपीआई के बारे में पढ़ें।
S.Lott

आह, मुझे लगता है कि मैं देख रहा हूं कि आपका क्या मतलब है, आवश्यकताओं को कॉलबैक सामान। यह दिलचस्प है, मैं इस पर गौर कर सकता हूं, अगर इस परियोजना के लिए नहीं, भविष्य के लिए। एक परमाणु चंक के रूप में ऑर्ट करने के बजाय, इसे थोड़ा ऊपर तोड़ दें, ताकि सर्वर क्लाइंट से इसकी आवश्यकता को नियंत्रित कर सके ...
मैट साइकर

हमने शुरू में अपना रोल किया लेकिन फिर IGAM ग्रुप में कई साल पहले ओपैम में चले गए। ओपन सोर्स प्रोडक्ट से बहुत खुश हैं।
रॉबर्ट मॉर्शेल

2

मैं @ S के साथ 100% सहमत हूँ। आप अपना रोल नहीं करना चाहते। मेरा सुझाव है कि एक और विकल्प: विंडोज एज़्योर एक्सेस कंट्रोल सर्विस (एसीएस) देखें। ACS की लागत पैसा है, लेकिन यह बहुत सस्ता है ($ 0.01 के लिए 10,000 लेनदेन) और बुनियादी ढांचे का एक अच्छा सौदा संभाला है। WIF क्लाइंट पर लीवरेज्ड है।

यह भी एक मानक-आधारित / दावा-आधारित समाधान है - जो सभी क्रोध है। WCF और REST और ACS को एक साथ उपयोग करने पर इस लेख को देखें

यदि आप भविष्य के बारे में सोच रहे हैं, तो यह भी एक तंत्र है जो आपके साथ बढ़ सकता है - जैसे कि आपके पास फ़ायरवॉल के बाहर मोबाइल ऐप हैं, पार्टनर हैं, और इसी तरह आगे भी। यहां तक ​​कि अगर आप इसका उपयोग नहीं करना चाहते हैं क्योंकि यह आपके फ़ायरवॉल के बाहर एक निर्भरता जोड़ता है, तो आप इसे विचारों के लिए जांचना चाह सकते हैं। बहुत चालाक है।

सौभाग्य! -Bill

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.