আমরা মাইক্রোসার্চিস আর্কিটেকচারে ব্যবহারকারীদের অনুমোদনের সর্বোত্তম উপায় নির্ধারণ করার চেষ্টা করছি, যখন মাইক্রোসার্ভেসিসের সীমিত অনুমতি রয়েছে তা নিশ্চিত করে। আমাদের আর্কিটেকচার জেডাব্লুটি টোকেন জারি পরিচালনা করতে কেন্দ্রীয় অনুমোদন পরিষেবা ব্যবহার করে।
আমাদের নিম্নলিখিত প্রয়োজনীয়তা রয়েছে:
ব্যবহারকারীদের নির্দিষ্ট ভূমিকা পালনে সীমাবদ্ধ থাকতে হবে। যেমন কোনও ব্যবহারকারীর কেবল নিজের মালিকানাধীন সামগ্রী তৈরি / সংশোধন / পড়তে সক্ষম হওয়া উচিত।
মাইক্রোসার্ভেসিস কেবল তাদের প্রয়োজনীয় অনুমতিগুলিতে সীমাবদ্ধ থাকতে হবে। উদাহরণস্বরূপ এমন একটি মাইক্রোসার্ভাইস যা কেবলমাত্র অন্য পরিষেবা থেকে ডেটা পড়তে হবে সে পরিষেবাতে ডেটা লেখার থেকে স্পষ্টভাবে নিষেধ করা উচিত।
উদাহরণস্বরূপ, ধরুন আমাদের কাছে এমন একটি সিস্টেম রয়েছে যেখানে ব্যবহারকারীরা কোনও চিত্র স্টোর সার্ভিসে ছবি আপলোড করতে পারেন। আমাদের একটি ট্যাগিং পরিষেবা রয়েছে যা কোনও অবস্থানের সাথে ছবিগুলি স্বয়ংক্রিয়ভাবে ট্যাগ করে। ব্যবহারকারীরা কেবল তাদের নিজস্ব ছবি সিআরইউডি করতে পারেন। ট্যাগিং পরিষেবা ইমেজ স্টোর পরিষেবা থেকে যে কোনও চিত্র পড়তে পারে, তবে পরিবর্তন / মুছতে সক্ষম হবে না।
JWT টোকেন ব্যবহার করে উপরেরটি অর্জনের একটি ভাল উপায় কী? কিছু সমাধান যা আমরা আলোচনা করেছি তা হ'ল:
ইমেজ স্টোর পরিষেবাটি 2 টি এপিআই প্রকাশ করে, এটি একটি বাহ্যিকভাবে উপলব্ধ (ব্যবহারকারীকে সিআরইউডি অ্যাক্সেস দেয়), এবং একটি যা অভ্যন্তরীণভাবে উপলব্ধ (কেবল অভ্যন্তরীণ পঠনযোগ্য অ্যাক্সেস দেয়)) জটিল বলে মনে হচ্ছে - অন্য কোনও অভ্যন্তরীণ পরিষেবায় যদি সমস্ত চিত্র পড়ার / লেখার অ্যাক্সেসের প্রয়োজন হয় (যেমন একটি যা স্বয়ংক্রিয়ভাবে স্পষ্ট চিত্রগুলি মুছে ফেলে)?
আমরা ব্যবহারকারীর জেডাব্লুটিটিতে দুটি অনুমতি সেট আপ করেছি, একটি হ'ল সিআরইউডি_উইনআইমেজস, অন্যটি হচ্ছে READ_forAnalysis। ট্যাগিং পরিষেবাটি দেখতে পাবে যে ব্যবহারকারীর READ_ForAnalysis অনুমতি রয়েছে কিনা এবং যদি তাই হয় তবে উপযুক্ত অনুরোধ করুন। আমাদের কাছে আরও একটি মাইক্রোসারভাইস রয়েছে যা ব্যবহারকারীদের নিজস্ব ইমেজগুলিতে সিআরইউডি অপারেশনের জন্য CRUD_OwnImages আছে কিনা তা পরীক্ষা করে দেখুন। এটি ব্যবহারকারীকে তার প্রয়োজনীয় ক্রিয়াকলাপের মধ্যে সীমাবদ্ধ রয়েছে তা নিশ্চিত করার জন্য এটি প্রতিটি মাইক্রোসার্ভিসকে দায়িত্ব দেয়। ইমেজ স্টোরটিতে এই পদ্ধতির সাথে প্রতিটি মাইক্রোসার্চিসিকে সীমাবদ্ধ করার কোনও উপায় নেই, সুতরাং এটি সম্ভাব্যভাবে ফ্লকি এবং ত্রুটির প্রবণ।
অনুমতি হিসাবে READ_forAnalysis সহ আমরা ট্যাগিং মাইক্রোসার্ভিসকে তার নিজস্ব ব্যবহারকারীর দেই। তারপরে, যখন ট্যাগিং পরিষেবা ইমেজ স্টোর থেকে চিত্রগুলির জন্য অনুরোধ করে, তখন এটিগুলিতে অ্যাক্সেস দেওয়া হয় তবে সেগুলি পরিবর্তন করতে নিষেধ করা হয়। ব্যবহারকারীর ব্যবহারকারীর কাছে কেবল CRUD_OwnImages অনুমতি রয়েছে, তাই তিনি কেবল সীমারেখা থেকে কেবল তার চিত্রগুলি পুনরুদ্ধার করতে এবং অ্যাক্সেস পেতে সক্ষম হন। অন্য কোনও পরিষেবায় যদি সমস্ত ডেটাতে সিআরইউডি প্রয়োজন হয়, আমরা এটিকে CRUD_AllData বা অনুরূপ দিতে পারি। আমরা এই পদ্ধতির পছন্দ করি কারণ প্রতিটি পরিষেবা এখন তার নিজস্ব ডেটার জন্য দায়ী (একাধিক পরিষেবা জুড়ে সেই যুক্তিটি সদৃশ করার চেয়ে) তবে পরিষেবাটি যদি ব্যবহারকারীর অনুমতি এবং মাইক্রোসার্চিস অনুমতি উভয়ই প্রয়োজন? আমরা কি দুটি জেডাব্লুটি টোকন (ব্যবহারকারীর এবং মাইক্রোসার্ভাইস উভয়) নিরাপদে প্রেরণ করতে পারি? অনুমতিগুলি নিরাপদে একত্রিত করার মাধ্যমে এটি পাঠানোর কোনও উপায় আছে কি? যেমন
যদি ব্যবহারকারীদের আরও নিচে প্রবাহের তথ্য প্রয়োজন হয় (2 বা 3 মাইক্রোসার্কেস দূরে) সমস্যাটি আরও বাড়িয়ে তোলে। আমরা কি কেবল ধরে নিয়েছি যে পৃথক মাইক্রোসার্ভিসেসগুলি তাদের প্রয়োজনীয় ক্রিয়াগুলিতে সীমাবদ্ধ করা এবং এটিকে স্পষ্ট করে তুলবে না?