আপনি যদি Firebase Authentication with Identity Platform আপগ্রেড করে থাকেন, তাহলে আপনার অ্যাপে সময়-ভিত্তিক ওয়ান-টাইম পাসওয়ার্ড (TOTP) মাল্টি-ফ্যাক্টর অথেনটিকেশন (MFA) যোগ করতে পারবেন।
Firebase Authentication with Identity Platform আপনাকে মাল্টি-ফ্যাক্টর অথেনটিকেশনের (MFA) জন্য একটি অতিরিক্ত ফ্যাক্টর হিসেবে TOTP ব্যবহার করার সুযোগ দেয়। আপনি যখন এই ফিচারটি চালু করেন, তখন আপনার অ্যাপে সাইন ইন করার চেষ্টাকারী ব্যবহারকারীরা একটি TOTP-এর জন্য অনুরোধ দেখতে পান। এটি তৈরি করার জন্য, তাদের অবশ্যই এমন একটি অথেনটিকেটর অ্যাপ ব্যবহার করতে হবে যা বৈধ TOTP কোড তৈরি করতে সক্ষম, যেমন গুগল অথেনটিকেটর ।
শুরু করার আগে
অন্তত একজন প্রোভাইডারকে সক্রিয় করুন যিনি এমএফএ সমর্থন করেন। উল্লেখ্য যে, নিম্নলিখিত প্রোভাইডারগুলি ছাড়া বাকি সবাই এমএফএ সমর্থন করে:
- ফোন প্রমাণীকরণ
- বেনামী প্রমাণীকরণ
- কাস্টম প্রমাণীকরণ টোকেন
- অ্যাপল গেম সেন্টার
আপনার অ্যাপ যেন ব্যবহারকারীর ইমেল ঠিকানা যাচাই করে, তা নিশ্চিত করুন। মাল্টি-ফ্যাক্টর অথেনটিকেশন (MFA) এর জন্য ইমেল যাচাইকরণ প্রয়োজন। এর ফলে, ক্ষতিকারক ব্যক্তিরা অন্যের মালিকানাধীন ইমেল ঠিকানা ব্যবহার করে কোনো পরিষেবার জন্য নিবন্ধন করতে পারে না এবং পরবর্তীতে দ্বিতীয় একটি ধাপ যোগ করে সেই ইমেল ঠিকানার প্রকৃত মালিককে পরিষেবা থেকে বাদ দিতে পারে না।
যদি এখনও তা না করে থাকেন, তাহলে Firebase JavaScript SDK ইনস্টল করুন।
TOTP MFA শুধুমাত্র মডিউলার ওয়েব SDK-এর v9.19.1 এবং তার উপরের সংস্করণগুলিতে সমর্থিত।
TOTP MFA সক্রিয় করুন
দ্বিতীয় ফ্যাক্টর হিসেবে TOTP সক্রিয় করতে, Admin SDK ব্যবহার করুন অথবা প্রজেক্ট কনফিগারেশন REST এন্ডপয়েন্টটি কল করুন।
Admin SDK ব্যবহার করতে, নিম্নলিখিতগুলি করুন:
যদি আপনি ইতিমধ্যে তা না করে থাকেন, তাহলে Firebase Admin Node.js SDK ইনস্টল করুন।
TOTP MFA শুধুমাত্র Firebase Admin Node.js SDK ভার্সন 11.6.0 এবং তার উপরের ভার্সনগুলোতে সমর্থিত।
নিম্নলিখিতটি চালান:
import { getAuth } from 'firebase-admin/auth'; getAuth().projectConfigManager().updateProjectConfig( { multiFactorConfig: { providerConfigs: [{ state: "ENABLED", totpProviderConfig: { adjacentIntervals: NUM_ADJ_INTERVALS } }] } })নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
NUM_ADJ_INTERVALS: TOTP গ্রহণ করার জন্য সংলগ্ন সময়-উইন্ডো ব্যবধানের সংখ্যা, যা শূন্য থেকে দশ পর্যন্ত হতে পারে। ডিফল্ট মান হলো পাঁচ।TOTP-এর কার্যপ্রণালী হলো এটি নিশ্চিত করা যে, যখন দুটি পক্ষ (প্রমাণকারী এবং যাচাইকারী) একই সময়সীমার (সাধারণত ৩০ সেকেন্ড দীর্ঘ) মধ্যে OTP তৈরি করে, তখন তারা যেন একই পাসওয়ার্ড তৈরি করে। তবে, পক্ষগুলোর মধ্যে সময়ের পার্থক্য এবং মানুষের প্রতিক্রিয়া জানানোর সময়কে সমন্বয় করার জন্য, আপনি TOTP পরিষেবাটিকে পাশাপাশি থাকা সময়সীমার TOTP-গুলোও গ্রহণ করার জন্য কনফিগার করতে পারেন।
REST API ব্যবহার করে TOTP MFA সক্রিয় করতে, নিম্নলিখিতটি চালান:
curl -X PATCH "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=mfa" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
-d \
'{
"mfa": {
"providerConfigs": [{
"state": "ENABLED",
"totpProviderConfig": {
"adjacentIntervals": NUM_ADJ_INTERVALS
}
}]
}
}'
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
-
PROJECT_ID: প্রকল্পের আইডি। NUM_ADJ_INTERVALS: সময়-সীমার ব্যবধানের সংখ্যা, যা শূন্য থেকে দশ পর্যন্ত হতে পারে। ডিফল্ট মান হলো পাঁচ।TOTP-এর কার্যপ্রণালী হলো এটি নিশ্চিত করা যে, যখন দুটি পক্ষ (প্রমাণকারী এবং যাচাইকারী) একই সময়সীমার (সাধারণত ৩০ সেকেন্ড দীর্ঘ) মধ্যে OTP তৈরি করে, তখন তারা যেন একই পাসওয়ার্ড তৈরি করে। তবে, পক্ষগুলোর মধ্যে সময়ের পার্থক্য এবং মানুষের প্রতিক্রিয়া জানানোর সময়কে সমন্বয় করার জন্য, আপনি TOTP পরিষেবাটিকে পাশাপাশি থাকা সময়সীমার TOTP-গুলোও গ্রহণ করার জন্য কনফিগার করতে পারেন।
ভর্তির একটি ধরণ বেছে নিন
আপনার অ্যাপে মাল্টি-ফ্যাক্টর অথেনটিকেশন প্রয়োজন হবে কিনা, এবং কীভাবে ও কখন আপনার ব্যবহারকারীদের নথিভুক্ত করবেন, তা আপনি বেছে নিতে পারেন। কিছু সাধারণ প্যাটার্নের মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত:
নিবন্ধনের অংশ হিসেবে ব্যবহারকারীর দ্বিতীয় ফ্যাক্টরটি নথিভুক্ত করুন। আপনার অ্যাপে যদি সকল ব্যবহারকারীর জন্য মাল্টি-ফ্যাক্টর অথেনটিকেশন প্রয়োজন হয়, তবে এই পদ্ধতিটি ব্যবহার করুন।
রেজিস্ট্রেশনের সময় দ্বিতীয় ফ্যাক্টর যুক্ত করার জন্য একটি এড়িয়ে যাওয়ার মতো বিকল্প রাখুন। আপনি যদি আপনার অ্যাপে মাল্টি-ফ্যাক্টর অথেনটিকেশনকে উৎসাহিত করতে চান কিন্তু বাধ্যতামূলক করতে না চান, তাহলে আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন।
সাইন-আপ স্ক্রিনের পরিবর্তে ব্যবহারকারীর অ্যাকাউন্ট বা প্রোফাইল ম্যানেজমেন্ট পেজ থেকে দ্বিতীয় ফ্যাক্টর যোগ করার সুবিধা দিন। এটি রেজিস্ট্রেশন প্রক্রিয়ার জটিলতা কমায়, এবং একই সাথে নিরাপত্তা-সংবেদনশীল ব্যবহারকারীদের জন্য মাল্টি-ফ্যাক্টর অথেনটিকেশন উপলব্ধ রাখে।
যখন ব্যবহারকারী বর্ধিত নিরাপত্তা প্রয়োজন এমন ফিচারগুলো অ্যাক্সেস করতে চাইবেন, তখন পর্যায়ক্রমে দ্বিতীয় ফ্যাক্টর যুক্ত করার প্রয়োজন হবে।
TOTP MFA-তে ব্যবহারকারীদের নথিভুক্ত করুন
আপনার অ্যাপের জন্য দ্বিতীয় ফ্যাক্টর হিসেবে TOTP MFA চালু করার পর, ব্যবহারকারীদের TOTP MFA-তে নথিভুক্ত করতে ক্লায়েন্ট-সাইড লজিক প্রয়োগ করুন:
প্রয়োজনীয় এমএফএ ক্লাস এবং ফাংশনগুলো ইম্পোর্ট করুন:
import { multiFactor, TotpMultiFactorGenerator, TotpSecret, getAuth, } from "firebase/auth";ব্যবহারকারীকে পুনরায় প্রমাণীকরণ করুন।
প্রমাণীকৃত ব্যবহারকারীর জন্য একটি TOTP সিক্রেট তৈরি করুন:
// Generate a TOTP secret. const multiFactorSession = await multiFactor(currentUser).getSession(); const totpSecret = await TotpMultiFactorGenerator.generateSecret( multiFactorSession );ব্যবহারকারীকে গোপনীয় তথ্যটি প্রদর্শন করুন এবং তাদের অথেন্টিকেটর অ্যাপে সেটি প্রবেশ করাতে বলুন।
অনেক অথেন্টিকেটর অ্যাপের মাধ্যমে, ব্যবহারকারীরা একটি QR কোড স্ক্যান করে দ্রুত নতুন TOTP সিক্রেট যোগ করতে পারেন, যা একটি Google Authenticator-উপযোগী কী URI-কে প্রতিনিধিত্ব করে। এই উদ্দেশ্যে একটি QR কোড তৈরি করতে,
generateQrCodeUrl()দিয়ে URI-টি তৈরি করুন এবং তারপর আপনার পছন্দের QR কোড লাইব্রেরি ব্যবহার করে এটিকে এনকোড করুন। উদাহরণস্বরূপ:const totpUri = totpSecret.generateQrCodeUrl( currentUser.email, "Your App's Name" ); await QRExampleLib.toCanvas(totpUri, qrElement);আপনি QR কোড প্রদর্শন করুন বা না করুন, সর্বদা সিক্রেট কী প্রদর্শন করুন, যাতে সেইসব অথেন্টিকেটর অ্যাপকে সাপোর্ট করা যায় যারা QR কোড পড়তে পারে না:
// Also display this key: const secret = totpSecret.secretKey;ব্যবহারকারী তাদের অথেন্টিকেটর অ্যাপে সিক্রেট যোগ করার পর, অ্যাপটি TOTP তৈরি করা শুরু করবে।
ব্যবহারকারীকে তাদের অথেন্টিকেটর অ্যাপে প্রদর্শিত TOTP টাইপ করতে বলুন এবং এটি ব্যবহার করে MFA তালিকাভুক্তি চূড়ান্ত করুন:
// Ask the user for a verification code from the authenticator app. const verificationCode = // Code from user input. // Finalize the enrollment. const multiFactorAssertion = TotpMultiFactorGenerator.assertionForEnrollment( totpSecret, verificationCode ); await multiFactor(currentUser).enroll(multiFactorAssertion, mfaDisplayName);
দ্বিতীয় ফ্যাক্টর দিয়ে ব্যবহারকারীদের সাইন ইন করুন
TOTP MFA ব্যবহার করে ব্যবহারকারীদের সাইন ইন করতে, নিম্নলিখিত কোডটি ব্যবহার করুন:
প্রয়োজনীয় এমএফএ ক্লাস এবং ফাংশনগুলো ইম্পোর্ট করুন:
import { getAuth, getMultiFactorResolver, TotpMultiFactorGenerator, } from "firebase/auth";আপনি যদি এমএফএ (MFA) ব্যবহার না করতেন, তাহলে যেভাবে করতেন, সেভাবেই
signInWithমেথডগুলোর মধ্যে একটি কল করুন। (উদাহরণস্বরূপ,signInWithEmailAndPassword()।) যদি মেথডটিauth/multi-factor-auth-requiredএরর দেখায়, তাহলে আপনার অ্যাপের এমএফএ (MFA) ফ্লো শুরু করুন।try { const userCredential = await signInWithEmailAndPassword( getAuth(), email, password ); // If the user is not enrolled with a second factor and provided valid // credentials, sign-in succeeds. // (If your app requires MFA, this could be considered an error // condition, which you would resolve by forcing the user to enroll a // second factor.) // ... } catch (error) { switch (error.code) { case "auth/multi-factor-auth-required": // Initiate your second factor sign-in flow. (See next step.) // ... break; case ...: // Handle other errors, such as wrong passwords. break; } }আপনার অ্যাপের এমএফএ (MFA) ফ্লো-তে প্রথমে ব্যবহারকারীকে দ্বিতীয় ফ্যাক্টরটি বেছে নিতে বলা উচিত, যা তিনি ব্যবহার করতে চান। একটি
MultiFactorResolverইনস্ট্যান্সেরhintsপ্রপার্টি পরীক্ষা করে আপনি সমর্থিত দ্বিতীয় ফ্যাক্টরগুলোর একটি তালিকা পেতে পারেন:const mfaResolver = getMultiFactorResolver(getAuth(), error); const enrolledFactors = mfaResolver.hints.map(info => info.displayName);যদি ব্যবহারকারী TOTP ব্যবহার করতে চান, তাহলে তাদের অথেন্টিকেটর অ্যাপে প্রদর্শিত TOTP-টি টাইপ করতে বলুন এবং সেটি ব্যবহার করে সাইন ইন করুন:
switch (mfaResolver.hints[selectedIndex].factorId) { case TotpMultiFactorGenerator.FACTOR_ID: const otpFromAuthenticator = // OTP typed by the user. const multiFactorAssertion = TotpMultiFactorGenerator.assertionForSignIn( mfaResolver.hints[selectedIndex].uid, otpFromAuthenticator ); try { const userCredential = await mfaResolver.resolveSignIn( multiFactorAssertion ); // Successfully signed in! } catch (error) { // Invalid or expired OTP. } break; case PhoneMultiFactorGenerator.FACTOR_ID: // Handle SMS second factor. break; default: // Unsupported second factor? break; }
TOTP MFA থেকে নিবন্ধন বাতিল করুন
এই অংশে বর্ণনা করা হয়েছে, কোনো ব্যবহারকারী TOTP MFA থেকে নিবন্ধন বাতিল করলে তা কীভাবে সামলাতে হবে।
যদি কোনো ব্যবহারকারী একাধিক মাল্টি-ফ্যাক্টর অথেনটিকেশন (MFA) বিকল্পের জন্য সাইন আপ করে থাকেন এবং সর্বশেষ সক্রিয় করা বিকল্পটি থেকে নিবন্ধন বাতিল করেন, তাহলে তিনি একটি auth/user-token-expired পান এবং লগ আউট হয়ে যান। ব্যবহারকারীকে অবশ্যই পুনরায় সাইন ইন করতে হবে এবং তার বিদ্যমান ক্রেডেনশিয়াল—যেমন, ইমেল ঠিকানা এবং পাসওয়ার্ড—যাচাই করতে হবে।
ব্যবহারকারীকে তালিকাভুক্তি থেকে বাদ দিতে, ত্রুটি সামলাতে এবং পুনঃপ্রমাণীকরণ শুরু করতে, নিম্নলিখিত কোডটি ব্যবহার করুন:
import {
EmailAuthProvider,
TotpMultiFactorGenerator,
getAuth,
multiFactor,
reauthenticateWithCredential,
} from "firebase/auth";
try {
// Unenroll from TOTP MFA.
await multiFactor(currentUser).unenroll(mfaEnrollmentId);
} catch (error) {
if (error.code === 'auth/user-token-expired') {
// If the user was signed out, re-authenticate them.
// For example, if they signed in with a password, prompt them to
// provide it again, then call `reauthenticateWithCredential()` as shown
// below.
const credential = EmailAuthProvider.credential(email, password);
await reauthenticateWithCredential(
currentUser,
credential
);
}
}
এরপর কী?
- Admin SDK ব্যবহার করে প্রোগ্রাম্যাটিকভাবে মাল্টি-ফ্যাক্টর ব্যবহারকারীদের পরিচালনা করুন ।