আমি একটি রেস্ট সিস্টেমের জন্য একটি এপিআই তৈরি করছি যা আমি উত্পাদন এবং গ্রাহক উভয়ই যাচ্ছি। আমি প্রমাণীকরণকে কীভাবে সুন্দরভাবে পরিচালনা করতে পারি তা বুঝতে চেষ্টা করে গত কয়েক দিন অতিবাহিত করেছি এবং মনে করি আমি শেষ পর্যন্ত কিছু নিয়ে এসেছি।
আমি অ্যাপ্লিকেশন স্ট্যাক সম্পর্কে নিম্নলিখিত তথ্যগুলির ভিত্তিতে এটি নিয়ে আসছি:
- ক্লায়েন্ট এবং সার্ভার .NET4 এ রয়েছে (ক্লায়েন্টের প্রোফাইলে ক্লায়েন্ট অংশ)
- সার্ভার WCF REST ব্যবহার করে এক্সপোজ করে
- আমি অ্যাপ্লিকেশনটিতে ব্যবহারকারীর নাম এবং পাসওয়ার্ডটিকে মেমরিতে রাখতে চাই না
3 থেকে, আমি টোকেন প্রমাণীকরণের একটি ফর্মটি ব্যবহার করতে চেয়েছিলাম, যাতে সার্ভারের মাধ্যমে শংসাপত্রগুলি যাচাই করার পরে ক্লায়েন্টটি বাকী অ্যাপ্লিকেশন জুড়ে ব্যবহার করার জন্য একটি টোকেন ফিরে পায় (এটি আমাকে অন্যান্য জিনিসগুলি করার অনুমতি দেবে, যেমন ব্যবহারকারীদের সময় নির্ধারণের সময়, ওয়েব এবং ডেস্কটপ সংস্করণ ইত্যাদির মধ্যে ব্যবহারকারীদের নির্বিঘ্নে সরানোতে সক্ষম)। কলগুলি কীভাবে রিপ্লে এবং টেম্পার প্রতিরোধী করা যায় তা নির্ধারণ করার পরে, আমি নিম্নলিখিতগুলি নিয়ে এসেছি:
- ক্লায়েন্টটি প্রমাণীকরণের চেষ্টা করার আগে, এটি
ECDiffieHellmanCng
ক্লাসটি ব্যবহার করে একটি ডিফি-হেলম্যান কী জুড়ি উত্পন্ন করে । - এটি ব্যবহারকারীর নাম এবং পাসওয়ার্ডের সাথে কী জুটির সার্বজনীন অংশটি তারের সাথে প্রেরণ করে (অবশ্যই HTTPS ওভারে)।
- সার্ভার ব্যবহারকারীর নাম / পাসওয়ার্ডের সংমিশ্রণটিকে প্রমাণীকরণ করে, যদি সফল হয় তবে তা নিম্নলিখিতটি করে:
- একটি অনন্য সেশন টোকেন তৈরি করে
- নিজস্ব ডিএইচ কী জুড়ি তৈরি করে এবং ক্লায়েন্টের সরবরাহিত সার্বজনীন কী থেকে ভাগ করা গোপনীয়তা গণনা করে
- এর ডাটাবেসে সেশন টোকেন, ভাগ করা গোপনীয়তা, ব্যবহারকারী এবং "শেষ ক্রিয়া" সময় (রোলিং মেয়াদোত্তীর্ণ উইন্ডোর জন্য ব্যবহৃত) নোট করে
- সেশন টোকেন, এর সর্বজনীন ডিএইচ কী এবং একটি প্রমাণীকরণ সাফল্যের বার্তা দেয়
- ক্লায়েন্ট প্রতিক্রিয়া থেকে ডিএইচ কী নিয়ে নেয়, ভাগ করা গোপনীয়তা গণনা করে এবং টোকেন এবং গোপন উভয়ই মেমরিতে সঞ্চয় করে।
এই বিন্দু থেকে, সেশন টোকেন / গোপন সংমিশ্রণটি অনুরোধটি আঙুলের ছাপানো এবং টাইমস্ট্যাম্পড হওয়ার সাথে, অন্য বেশিরভাগ আরইএসটি এপিআইয়ের মতো কাজ করে এবং তারপরে এক প্রকার এইচএমএসি উত্পন্ন হয়। যখনই কোনও ক্লায়েন্ট সার্ভারের বিরুদ্ধে কোনও ক্রিয়া সম্পাদন করে, এটি টোকেন / গোপন যুগলটি পরীক্ষা করে এবং বৈধ এবং মেয়াদোত্তীর্ণ না হলে কর্মের অনুমতি দেয় এবং সেশনে শেষ ক্রিয়া রেকর্ড আপডেট করে।
আমি কোনও সুস্পষ্ট ত্রুটি দেখতে পাচ্ছি না, এবং সম্ভবত এটির জন্য খুব বেশি ইঞ্জিনিয়ারড, তবে এটি একটি পর্যায়ে কীভাবে করা যায় তা শিখতে হবে। এইচএমএসি রিপ্লে আক্রমণগুলি প্রতিরোধ করে, ডিএইচ আলোচনার সাহায্যে এমআইটিএম আক্রমণগুলি রোধ করা যায় (আমি এইচএমএসি / ডিএইচ এর মধ্যে আমার মাথার উপরের অংশ থেকে একটি কার্যক্ষম আক্রমণ সম্পর্কে ভাবতে পারি না)।
যে কোনও ছিদ্র যে কেউ এতে ঝুঁকতে পারে?