দ্বি-ফ্যাক্টর প্রমাণীকরণ ব্যবহারকারীর পক্ষ থেকে একটি খুব সাধারণ প্রক্রিয়ার মতো মনে হতে পারে। অনেকেই দীর্ঘদিন ধরে অভ্যস্ত হয়েছে যে অনেকগুলি অ্যাপ্লিকেশন ব্যবহার করার সময়, একটি পরিচিত লগইন এবং পাসওয়ার্ড সংমিশ্রণ প্রবেশ করা যথেষ্ট নয়। অতিরিক্ত নিরাপত্তার জন্য এবং অননুমোদিত অ্যাক্সেস রোধ করার জন্য একটি অতিরিক্ত যাচাইকরণ ফ্যাক্টর চালু করা হয়েছে। বেশিরভাগ ক্ষেত্রে, এটি একটি অনন্য কোড যা ই-মেইল বা এসএমএস দ্বারা প্রাপ্ত করা যেতে পারে।
এই টিউটোরিয়ালে, আমরা শিখব কিভাবে আপনি AppMaster এ দ্বি-ফ্যাক্টর প্রমাণীকরণ বাস্তবায়ন করতে পারেন। উদাহরণ হিসাবে, মেইলে কোড পাঠানোর জন্য ব্যবহার করা হবে। আমরা বিশ্লেষণ করব কোন মডিউলগুলিকে সংযুক্ত করতে হবে, কী সেটিংস তৈরি করতে হবে, কী ব্যবসায়িক প্রক্রিয়া তৈরি করতে হবে এবং কীভাবে অনুশীলনে সমাপ্ত ফলাফল পরীক্ষা করতে হবে।
প্রথমে সাধারণ পরিকল্পনাটি দেখে নেওয়া যাক। আমাদের ব্যবসায়িক প্রক্রিয়ায় কী পদক্ষেপগুলি বাস্তবায়ন করা দরকার?
- লগইন যাচাইকরণ (ব্যবহারকারী আসলে নিবন্ধিত কিনা তা নিশ্চিত করুন)।
- পাসওয়ার্ডটি সঠিক কিনা তা পরীক্ষা করা হচ্ছে।
- মেল বা এসএমএসের মাধ্যমে একটি নিশ্চিতকরণ কোড পাঠানো হচ্ছে।
- কোডের প্রাসঙ্গিকতা পরীক্ষা করা হচ্ছে।
- কোডের সঠিকতা পরীক্ষা করা হচ্ছে।
- প্রমাণীকরণের সমাপ্তি।
প্রস্তুতিমূলক পর্যায়
এমনকি আপনি দ্বি-ফ্যাক্টর প্রমাণীকরণ ডিজাইন করা শুরু করার আগে, ব্যবহারকারী নিবন্ধন পর্যায়ে, আপনাকে নিশ্চিত হতে হবে যে:
- ব্যবহারকারীর ডেটাতে অবশ্যই একটি ই-মেইল থাকতে হবে। এটি যাচাইকরণ কোড পাঠাতে ব্যবহার করা হবে। ই-মেইল প্রায়ই একটি লগইন হিসাবে ব্যবহৃত হয়, এবং আমরা ঠিক যেমন একটি উদাহরণ তাকান হবে.
- লগইন অনন্য. একই লগইন সহ দুটি ভিন্ন ব্যবহারকারী সিস্টেমে বিদ্যমান থাকতে পারে না।
এই (এবং অন্যান্য অনেক) কাজগুলি সমাধান করার সুবিধার জন্য, প্রতিটি AppMaster প্রকল্পে ডিফল্টরূপে Auth মডিউল ইনস্টল করা থাকে। এটিতে প্রয়োজনীয় ডাটাবেস মডেল, ব্যবসায়িক প্রক্রিয়া ব্লক এবং তাদের ব্যবহারের জন্য শেষ পয়েন্ট রয়েছে।
লগইন যাচাইকরণ
লগইন, পাসওয়ার্ড এবং যাচাইকরণ কোড ব্যবসায়িক প্রক্রিয়ার ইনপুট পরামিতি হিসাবে ব্যবহৃত হয়। কিন্তু প্রথম পর্যায়ে, আমাদের শুধুমাত্র একটি লগইন প্রয়োজন। এটি নিশ্চিত করতে সাহায্য করবে যে এই ব্যবহারকারী বিদ্যমান। তিনি নিবন্ধিত হয়েছে, এবং এটি সম্পর্কে তথ্য ডাটাবেসে সংরক্ষিত আছে.
এটি করার জন্য, DB: Search User ব্লক ডাটাবেসে প্রদত্ত লগইন সহ ব্যবহারকারীর জন্য অনুসন্ধান করে। একটি সঠিক মিল অনুসন্ধান করতে SearchExact = True প্যারামিটার সেট করতে ভুলবেন না।
প্রাপ্ত ডেটা সূচক 0 সহ Array Element ব্লকে প্রেরণ করা হয় (গণনা শূন্য থেকে শুরু হয়, এবং পাওয়া একমাত্র মানটি সর্বদা অ্যারেতে সূচক 0 এর সাথে মিলে যায়)।
Is Null ব্লক চেক করে যে ব্যবহারকারী আসলেই পাওয়া গেছে কিনা। এবং ফলাফলের উপর নির্ভর করে ( True/False ), If-Else ব্লকটি হয় একটি ত্রুটি বার্তা দিয়ে ব্যবসায়িক প্রক্রিয়াকে বাধা দেবে ( Raise Error ) অথবা এটিকে আরও নির্দেশ করবে।
গোপন নাম্বার যাচাই
এই পর্যায়ে, আপনাকে নিশ্চিত করতে হবে যে ব্যবহারকারীর পাসওয়ার্ড সঠিকভাবে প্রবেশ করানো হয়েছে।
এবং এখানে, এটা বোঝা অপরিহার্য যে পাসওয়ার্ডগুলি ডাটাবেসে স্পষ্টভাবে সংরক্ষণ করা হয় না। Bcrypt ফাংশন তাদের হ্যাশ করে, এবং শুধুমাত্র ফলাফল হ্যাশ ডাটাবেসে সংরক্ষণ করা হয়। অতএব, এমনকি যদি আমরা ধরে নিই যে একটি ডেটা ফাঁস হবে, আক্রমণকারীরা এখনও ব্যবহারকারীর পাসওয়ার্ড খুঁজে পাবে না; তারা নিরাপদে এনক্রিপ্ট করা হয়.
এই কারণে, আপনি ডাটাবেস থেকে পাসওয়ার্ড পেতে এবং প্রবেশ করা পাসওয়ার্ডের সাথে তুলনা করতে পারবেন না। আপনাকে পাসওয়ার্ডের হ্যাশ পেতে হবে এবং তুলনা করার জন্য এটি ব্যবহার করতে হবে। এই সমস্যা সমাধানের জন্য, Auth: Probe Password ব্লক ব্যবহার করা হয়। ইনপুট প্যারামিটার হিসাবে, এটি ব্যবহারকারীর দ্বারা প্রবেশ করা পাসওয়ার্ড ( password ) এবং ডাটাবেসে সংরক্ষিত পাসওয়ার্ডের হ্যাশ ( hashed_password ) নেয় এবং এটিকে String ডেটা টাইপ ( To String ব্লক) এ রূপান্তর করে।
ফলাফলের উপর নির্ভর করে, পূর্ববর্তী ধাপের মত, If-Else ব্লক ব্যবহার করে, আমরা হয় একটি ত্রুটি বার্তা প্রদর্শন করি ( Raise Error , Message = Password is wrong ) অথবা প্রক্রিয়াটিকে পরবর্তী পর্যায়ে নির্দেশ করি।
ব্যবহারকারী মডেল এক্সটেনশন
পরবর্তী ধাপের জন্য, আপনাকে ব্যবহারকারীর মডেলে একটি ছোট পরিবর্তন করতে হবে এবং যে কোডটি নিশ্চিত করতে হবে সে সম্পর্কে তথ্য যোগ করতে হবে।
সাধারণভাবে, User মডেলে প্রাথমিকভাবে এমন ক্ষেত্র রয়েছে যা এই কাজের জন্য ব্যবহার করা যেতে পারে - Confirmed, Confirmation code, Confirmation code expires at । কিন্তু এই উদাহরণে, আমরা ধরে নেব যে এই ক্ষেত্রগুলি শুধুমাত্র নিবন্ধন এবং প্রাথমিক অ্যাকাউন্ট যাচাইকরণের জন্য ব্যবহৃত হয়।
প্রক্রিয়াটির আরও স্পষ্টতার জন্য, আসুন একটি পৃথক twofa ( two-factor authentication ) মডেল তৈরি করি, User মডেলটিকে এটির সাথে যুক্ত করি (1-থেকে-1 সম্পর্ক has one ), এবং একটি ক্ষেত্র যোগ করুন - code ( String টাইপ)।
ইমেল পাঠানোর প্রস্তুতি নিচ্ছে
নিশ্চিতকরণ কোড সহ ই-মেইল পাঠাতে, একজনকে প্রাথমিক প্রস্তুতি নিতে হবে। সবচেয়ে অ্যাক্সেসযোগ্য বিকল্পগুলির মধ্যে একটি হল Custom SMTP মডিউল ব্যবহার করা, যা আপনাকে ইনস্টল এবং কনফিগার করতে হবে।
Gmail ব্যবহার করার সময়, বেশিরভাগ সেটিংস ইতিমধ্যেই ডিফল্টরূপে সেট করা থাকে এবং আপনাকে আপনার ব্যবহারকারীর নাম এবং পাসওয়ার্ড যোগ করতে হবে৷ অন্যান্য মেল সার্ভার ব্যবহার করার সময়, আপনি প্রয়োজনীয় ডেটা পেতে তাদের ডকুমেন্টেশন উল্লেখ করলে এটি সাহায্য করবে।
এই ক্ষেত্রে, আপনাকে মেল সার্ভারের নিরাপত্তা সেটিংস সামান্য পরিবর্তন করতে হতে পারে। উদাহরণস্বরূপ, Gmail ডিফল্টরূপে তৃতীয় পক্ষের অ্যাপ্লিকেশন ব্যবহার করে সংযোগগুলি ব্লক করতে পারে এবং আপনাকে সেটিংসে এই সীমাবদ্ধতাটি সরাতে হবে৷
একটি যাচাইকরণ কোড পাঠানো হচ্ছে
আমরা লগইন এবং পাসওয়ার্ড চেক করেছি এবং সমস্ত প্রয়োজনীয় প্রস্তুতি সম্পন্ন করেছি, তাই এখন আপনি একটি নিশ্চিতকরণ কোড সহ একটি চিঠি পাঠাতে এগিয়ে যেতে পারেন।
Custom SMTP: Send Email ব্লক গন্তব্য হিসাবে ঠিকানাগুলির একটি অ্যারে ব্যবহার করে। অতএব, যদিও আপনাকে শুধুমাত্র একটি ঠিকানায় একটি চিঠি পাঠাতে হবে, এটি অ্যারেতে যোগ করা উচিত। এর জন্য, Append Array ব্লক ব্যবহার করা হয়।
পরবর্তী ধাপ হল একটি যাচাইকরণ কোড তৈরি করা। Random string ব্লক এর জন্য উপযুক্ত। আমরা 6টি র্যান্ডম সংখ্যার সমন্বয়ে একটি কোড পাঠাব এবং উপযুক্ত সেটিংস করব৷ Length = 6, With 0-9 = True , অন্যান্য সমস্ত প্যারামিটার = False ।
এর পরে, আপনাকে চিঠিটির পাঠ্য তৈরি করতে হবে। এটি করার জন্য, জেনারেট করা কোডে ব্যাখ্যামূলক পাঠ্য যোগ করতে Concat Strings ব্লক ব্যবহার করুন ( First = Verification code: ), ফলাফলটিকে Text ডেটা টাইপ ( To Text ব্লকে) রূপান্তর করুন এবং ফলাফলটিকে ইমেলের body প্যারামিটারের সাথে সংযুক্ত করুন। পাঠানো ব্লক।
চূড়ান্ত পাঠানোর জন্য, এটি শুধুমাত্র চিঠির বিষয় ( subject ) এবং প্রেরক ( from_name ) নির্দিষ্ট করার জন্য অবশিষ্ট থাকে।
কিন্তু শুধু কোড পাঠানোই যথেষ্ট নয়; এটি ব্যবহারকারীর ডেটাতেও সংরক্ষণ করা আবশ্যক। সর্বোপরি, ব্যবহারকারী যখন কোডটি গ্রহণ করে এবং নিশ্চিতকরণ হিসাবে এটি ফেরত পাঠায় তখন আপনাকে এর সঠিকতা যাচাই করতে হবে।
এটি করার জন্য, আমরা twofa মডেলটি ব্যবহার করব, যা আমরা আগে বিচক্ষণতার সাথে তৈরি করেছি। যদি এটি প্রথম কোড জমা হয়, তাহলে আপনাকে অবশ্যই এটি কোন ব্যবহারকারীর সাথে সম্পর্কিত তথ্য দিয়ে তৈরি করতে হবে। পুনঃব্যবহারের ক্ষেত্রে, এটির আইডি এবং নতুন কোড নির্দেশ করে বিদ্যমান এন্ট্রি প্যাচ করা প্রয়োজন।
স্টেজের চূড়ান্ত ধাপ হল ই-মেইলে কোড পাঠানোর বিষয়ে একটি বার্তা ফেরত দিতে Raise Error ব্লক ব্যবহার করা।
কোড প্রাসঙ্গিকতা চেক
অতিরিক্ত নিরাপত্তার যত্ন নেওয়া এবং একটি সাধারণ গণনা থেকে কোড রক্ষা করা মূল্যবান। ইনপুট প্রচেষ্টার সংখ্যা, তাদের ফ্রিকোয়েন্সি এবং জমা দেওয়া কোডের জীবনকাল সীমিত করা বুদ্ধিমানের কাজ হবে। আমরা এই সমস্ত উদাহরণ বিশ্লেষণ করব না; নিরাপত্তা প্রয়োজনীয়তা প্রতিটি প্রকল্পের জন্য পৃথক এবং বিভিন্ন শর্ত অন্তর্ভুক্ত হতে পারে. আমরা কোডটির বৈধতা সময়কাল দ্বারা এর প্রাসঙ্গিকতা পরীক্ষা করার জন্য নিজেদেরকে সীমাবদ্ধ রাখি।
চলুন বর্তমান সময় পেতে Current date & time ব্লক ব্যবহার করা যাক। Date & time difference ব্লকের B প্যারামিটারের সাথে এটি সংযুক্ত করুন। আমরা twofa মডেলের UpdatedAt ক্ষেত্রটি A প্যারামিটার হিসাবে ব্যবহার করব।
ফলস্বরূপ, আমরা Time span পাই - দুটি টাইম পয়েন্টের মধ্যে পার্থক্য। এই পার্থক্যটি একটি নির্দিষ্ট নির্বাচিত মান অতিক্রম করেছে কিনা তা পরীক্ষা করার জন্যই এটি অবশিষ্ট রয়েছে। আমাদের উদাহরণে, এটি 5 মিনিট, যা আমরা Greater ব্লকের স্ট্যাটিক মান B হিসাবে সেট করব।
If-Else ব্লক তুলনা ফলাফল ব্যবহার করবে প্রক্রিয়া আরও গাইড করতে. যদি True হয় (পার্থক্যটি 5 মিনিটের বেশি হয়), প্রক্রিয়াটি চিঠি পাঠানোর ধাপে ফিরে আসবে; ব্যবহারকারী একটি আপডেট কোড পাবেন। False এর ক্ষেত্রে (কোডটি তাজা এবং আপ-টু-ডেট), এই কোডটি পরীক্ষা করে এগিয়ে যাওয়া সম্ভব হবে।
কোড পূনর্বিবেচনা
প্রমাণীকরণের চূড়ান্ত পর্যায়ে প্রাপ্ত কোড পরীক্ষা করা হয়।
Equal ব্লককে অবশ্যই যাচাই করতে হবে যে ব্যবহারকারীর দ্বারা পাস করা কোডটি ব্যবহারকারীর সাথে যুক্ত twofa মডেলে সংরক্ষিত কোডের সাথে মেলে। যদি এটি না হয় এবং কোডটি ভুলভাবে নির্দিষ্ট করা হয় ( If-Else -> False ), তাহলে আপনাকে একটি ত্রুটি বার্তা প্রদর্শন করতে হবে ( Raise Error , Message = Code is wrong )। যদি তুলনাটি মিল নিশ্চিত করে, আপনি চূড়ান্ত প্রমাণীকরণ পর্যায়ে এগিয়ে যেতে পারেন।
এটি করার জন্য, আমরা Auth: Authentication ব্লক ব্যবহার করি এবং ব্যবহারকারীর অনুমোদন টোকেন দিয়ে তার সম্পর্কে তথ্য পাই। সফল প্রমাণীকরণের ফলে আমরা সেগুলিকে End ব্লকে পাস করি।
একটি শেষ পয়েন্ট তৈরি করা হচ্ছে
ব্যবসায়িক প্রক্রিয়া তৈরি করা হয়েছে কিন্তু এখনও ব্যবহারের জন্য উপলব্ধ নয়। আপনাকে একটি এন্ডপয়েন্ট তৈরি করতে হবে যা এই ব্যবসার প্রক্রিয়াটি চালাবে।
একটি যুক্তিসঙ্গত সমাধান হবে ডিফল্ট প্রমাণীকরণ শেষ পয়েন্ট ( POST /Auth ) ব্যবহার করা। এটি তার ব্যবসায়িক প্রক্রিয়াটি প্রতিস্থাপন করতে এবং এইমাত্র তৈরি করা একটি ইনস্টল করার জন্য যথেষ্ট হবে। এইভাবে, সাধারণ প্রমাণীকরণ অক্ষম করা হবে এবং এর পরিবর্তে দ্বি-গুণক প্রমাণীকরণ ব্যবহার করা হবে।
প্রকাশনা এবং পরীক্ষা
এটি দ্বি-ফ্যাক্টর প্রমাণীকরণ তৈরি সম্পূর্ণ করে। আপনি ফলাফল প্রকাশ করতে পারেন এবং এটি কর্মে পরীক্ষা করতে পারেন। এর জন্য, Swagger ব্যবহার করা সুবিধাজনক, যা Preview বোতামের Project API বিভাগে ডিপ্লয় প্ল্যানের নামে ক্লিক করে অ্যাক্সেস করা যেতে পারে।
এটি শুধুমাত্র তালিকায় পছন্দসই শেষ বিন্দু খুঁজে পেতে, ব্যবহারকারীর ডেটা প্রবেশ করান এবং এক্সিকিউট বোতামের সাহায্যে Execute শুরু করতে রয়ে গেছে। পরীক্ষার সময় যদি কোনো ত্রুটি পাওয়া যায়, তাহলে ব্যবসায়িক প্রক্রিয়ায় ফিরে যান এবং প্রয়োজনীয় পরিবর্তন করুন।