আমি মূল মন্তব্যটি যেভাবে বলা হয়েছিল সেভাবে শব্দটি বেছে নিতে চাইতাম না, তবে এটি কোনও সম্ভাব্য বৈধ সমস্যা চিহ্নিত করে ।
বিশেষতঃ, উদ্বেগ যে ওয়ারেন্ট বিচ্ছিন্নতা তা প্রমাণীকরণ বনাম অনুমোদন ।
প্রমাণীকরণ বলতে লগ ইন এবং একটি পরিচয় পাওয়ার প্রক্রিয়া বোঝায়। এটি কীভাবে সিস্টেমগুলি জানে যে আপনি কে , এবং ব্যক্তিগতকরণ, বস্তুর মালিকানা ইত্যাদির মতো জিনিসগুলির জন্য ব্যবহৃত হয় knows
অনুমোদনের অর্থ আপনাকে যা করতে দেওয়া হচ্ছে তা বোঝায় এবং এটি (সাধারণত) আপনি কে তা দ্বারা নির্ধারিত হয় না । পরিবর্তে, এটি ভূমিকা বা অনুমতিগুলির মতো কিছু সুরক্ষা নীতি দ্বারা নির্ধারিত হয়, যা আপনার নাম বা ইমেল ঠিকানার মতো জিনিসের বিষয়ে চিন্তা করে না।
এই দু'জন একে অপরের সাথে orthogonally পরিবর্তন করতে পারেন। উদাহরণস্বরূপ, আপনি ওপেনআইডিআইডি / ওপেনআউট সরবরাহকারী যোগ করে প্রমাণীকরণের মডেলটি পরিবর্তন করতে পারেন। এবং আপনি কোনও নতুন ভূমিকা যুক্ত করে, বা আরবিএসি থেকে এব্যাককে পরিবর্তন করে সুরক্ষা নীতি পরিবর্তন করতে পারেন।
যদি এগুলি সবই একটি শ্রেণিতে বা বিমূর্তিতে চলে যায়, তবে আপনার সুরক্ষা কোড, যা ঝুঁকি নিরসনের জন্য আপনার অন্যতম গুরুত্বপূর্ণ সরঞ্জাম , উদ্বেগজনকভাবে, উচ্চ-ঝুঁকিতে পরিণত হয়।
আমি এমন সিস্টেমে কাজ করেছি যেখানে প্রমাণীকরণ এবং অনুমোদন খুব শক্তভাবে মিলিত হয়েছিল। একটি সিস্টেমে দুটি সমান্তরাল ব্যবহারকারীর ডেটাবেস ছিল, প্রতিটি একধরনের "ভূমিকা" এর জন্য। যে ব্যক্তি বা দলটি এটি ডিজাইন করেছিল তা স্পষ্টতই কখনই বিবেচনা করে নি যে কোনও একক শারীরিক ব্যবহারকারী উভয় চরিত্রে থাকতে পারে, বা এমন কিছু ক্রিয়াকলাপ থাকতে পারে যা একাধিক ভূমিকার সাথে সাধারণ ছিল, বা ব্যবহারকারীর আইডি সংঘর্ষে সমস্যা হতে পারে। এটি একটি স্বীকৃত চরম উদাহরণ, তবে এটির সাথে কাজ করা অবিশ্বাস্যরকম বেদনাদায়ক / ছিল ।
মাইক্রোসফ্ট এবং সান / ওরাকল (জাভা) সুরক্ষা অধ্যক্ষ হিসাবে প্রমাণীকরণ এবং অনুমোদনের তথ্যের সামগ্রিক উল্লেখ করে । এটি নিখুঁত নয়, তবে এটি যুক্তিসঙ্গতভাবে ভাল কাজ করে। .NET ইন, উদাহরণস্বরূপ, আপনার আছে , যা encapsulates - সাবেক একটি হচ্ছে নীতি (অনুমোদনের) বস্তু যখন আধুনিক একটি হল পরিচয় (প্রমাণীকরণ)। আপনি যুক্তিসঙ্গতভাবে এক করা সিদ্ধান্ত নিয়ে প্রশ্ন পারে ভিতরে অপরের কিন্তু গুরুত্বপূর্ণ বিষয় যে অধিকাংশ আপনি যে কোডটি বিমূর্ত শুধু এক জন্য হতে হবে লিখতে যার মানে এটি পরীক্ষা এবং refactor করা সহজ।IPrincipal
IIdentity
User.IsAdmin
ক্ষেত্রের সাথে কোনও সমস্যা নেই ... যদি ক্ষেত্রও না থাকে User.Name
। এটি ইঙ্গিত দেয় যে "ব্যবহারকারী" ধারণাটি সঠিকভাবে সংজ্ঞায়িত হয়নি এবং এটি দুঃখের বিষয়, সুরক্ষার কথা বলতে গেলে এই বিকাশকারীদের মধ্যে খুব সাধারণ একটি ভুল যা কানের পিছনে কিছুটা ভিজে যায়। সাধারণত, পরিচয় এবং নীতি দ্বারা ভাগ করা উচিত একমাত্র জিনিসটি ইউজার আইডি, যা কাকতালীয়ভাবে নয়, ঠিক কীভাবে এটি উইন্ডোজ এবং * নিক্স সুরক্ষা মডেল উভয় ক্ষেত্রে প্রয়োগ করা হয়।
এটি মোড়ক বস্তু তৈরি করতে সম্পূর্ণরূপে গ্রহণযোগ্য যা পরিচয় এবং নীতি উভয়ই সজ্জিত করে। উদাহরণস্বরূপ, এটি ড্যাশবোর্ডের স্ক্রিন তৈরির সুবিধার্থে যেখানে আপনার বর্তমান ব্যবহারকারীকে অ্যাক্সেসের অনুমতি দেওয়া বিভিন্ন উইজেট বা লিঙ্কগুলির পাশাপাশি একটি "হ্যালো" বার্তা প্রদর্শন করতে হবে। যতক্ষণ না এই মোড়ক কেবল পরিচয় এবং নীতি সম্পর্কিত তথ্য গুটিয়ে রাখে এবং এর মালিকানা দাবি করে না। অন্য কথায়, যতক্ষণ না এটি সামগ্রিক মূল হিসাবে উপস্থাপিত হচ্ছে না ।
ইয়াজিএনআই এবং সমস্ত কিছুর কারণে আপনি যখন প্রথম নতুন অ্যাপ্লিকেশনটি ডিজাইন করেন তখন সরল সুরক্ষা মডেলটি সর্বদা একটি ভাল ধারণা বলে মনে হয় তবে এটি সর্বদা আপনাকে পরে কামড়ানোর জন্য ফিরে আসে কারণ অবাক করা অবাক, নতুন বৈশিষ্ট্য যুক্ত হয়!
সুতরাং, আপনি যদি নিজের পক্ষে সেরা জানেন তবে আপনি প্রমাণীকরণ এবং অনুমোদনের তথ্য আলাদা রাখবেন। এমনকি যদি এখনই "অনুমোদন" "ইসএডমিন" পতাকার মতই সহজ, আপনি এখনও প্রমাণীকরণের তথ্য হিসাবে একই বর্গ বা টেবিলের অংশ না হন তবে আপনি আরও ভাল হতে পারেন, যাতে এবং কখন আপনার সুরক্ষা নীতিটির প্রয়োজন হয় পরিবর্তন করুন, আপনার প্রমাণীকরণ সিস্টেমগুলিতে আপনাকে পুনর্গঠনমূলক সার্জারি করার দরকার নেই যা ইতিমধ্যে ভাল কাজ করে।