मैं एक REST सेवा के लिए एक एपीआई काम कर रहा हूँ, जिसका उत्पादन और उपभोग दोनों करने जा रहा हूँ। मैंने पिछले कुछ दिनों को यह जानने में बिताया है कि कैसे प्रमाणीकरण को अच्छी तरह से संभालना है, और मुझे लगता है कि मैं आखिरकार कुछ लेकर आया हूं।
मैं आवेदन स्टैक के बारे में निम्नलिखित तथ्यों के आधार पर इसे लेकर आ रहा हूं:
- क्लाइंट और सर्वर .NET 4 में हैं (क्लाइंट प्रोफाइल में ग्राहक का हिस्सा)
- सर्वर WCF REST का उपयोग करता है
- मैं वास्तव में ऐप में उपयोगकर्ता का नाम और पासवर्ड स्मृति में नहीं रखना चाहता हूं
3 से, मैं एक टोकन प्रमाणीकरण का उपयोग करना चाहता था, ताकि सर्वर द्वारा क्रेडेंशियल्स सत्यापित किए जाने के बाद, क्लाइंट को ऐप के बाकी हिस्सों में उपयोग करने के लिए एक टोकन वापस मिल जाए (यह मुझे अन्य चीजों को करने की अनुमति देगा, जैसे कि उपयोगकर्ताओं को समय देना, वेब और डेस्कटॉप संस्करणों, आदि के बीच उपयोगकर्ताओं को मूल रूप से स्थानांतरित करने में सक्षम होना)। यह पता लगाने के बाद कि कॉल रीप्ले और छेड़छाड़ को कैसे प्रतिरोधी बनाया जाए, मैं निम्नलिखित के साथ आया हूं:
- इससे पहले कि ग्राहक प्रमाणित करने का प्रयास करे, यह
ECDiffieHellmanCng
वर्ग का उपयोग करके एक डिफि-हेलमैन कुंजी युग्म उत्पन्न करता है । - यह उपयोगकर्ता के नाम और पासवर्ड (निश्चित रूप से HTTPS से अधिक) के साथ तार के ऊपर की जोड़ी का सार्वजनिक भाग भेजता है।
- सर्वर उपयोगकर्ता नाम / पासवर्ड संयोजन को प्रमाणित करता है, यदि सफल होता है, तो यह निम्न कार्य करता है:
- एक अद्वितीय सत्र टोकन बनाता है
- अपनी स्वयं की डीएच कुंजी जोड़ी बनाता है, और क्लाइंट द्वारा प्रदान की गई सार्वजनिक कुंजी से साझा रहस्य की गणना करता है
- अपने डेटाबेस में सत्र टोकन, साझा किए गए रहस्य, उपयोगकर्ता और "अंतिम क्रिया" समय (रोलिंग समाप्ति विंडो के लिए उपयोग किया गया) पर ध्यान देता है
- सत्र टोकन लौटाता है, इसकी सार्वजनिक डीएच कुंजी, और एक प्रमाणीकरण सफलता संदेश
- क्लाइंट प्रतिक्रिया से डीएच कुंजी लेता है, साझा रहस्य की गणना करता है, और टोकन और मेमोरी दोनों को मेमोरी में संग्रहीत करता है।
इस बिंदु पर, सत्र टोकन / गुप्त संयोजन अधिकांश अन्य रीस्ट एपीआई की तरह काम करता है, जिसमें अनुरोध फिंगरप्रिंट और टाइमस्टैम्प किया गया है, और फिर एचएमएसी के कुछ प्रकार उत्पन्न होते हैं। जब भी कोई क्लाइंट सर्वर के खिलाफ कार्रवाई करता है, तो यह टोकन / गुप्त जोड़ी की जांच करता है, और कार्रवाई की अनुमति देता है यदि यह वैध है और इसकी अवधि समाप्त नहीं हुई है, और सत्र में अंतिम कार्रवाई रिकॉर्ड को अपडेट करता है।
मुझे कोई स्पष्ट दोष नहीं दिख रहा है, और शायद इसके लिए अति-इंजीनियर है, लेकिन मुझे यह सीखने की आवश्यकता है कि किसी बिंदु पर यह कैसे किया जाए। HMAC रिप्ले हमलों को रोकता है, DH बातचीत MITM हमलों को रोकने में मदद करता है (मैं HMAC / DH के बीच अपने सिर के ऊपर से एक व्यावहारिक हमले के बारे में सोच भी नहीं सकता)।
किसी भी छेद किसी को भी इस में प्रहार कर सकते हैं?