আপনি Firebase Authentication with Identity Platform-এ আপগ্রেড করে থাকলে, আপনার অ্যাপে সময়-নির্ভর একবার ব্যবহারের পাসওয়ার্ড (TOTP) বহু-স্তরীয় যাচাইকরণ (MFA) যোগ করতে পারবেন।
Firebase Authentication with Identity Platform আপনাকে MFA-এর জন্য অতিরিক্ত ফ্যাক্টর হিসেবে TOTP ব্যবহার করতে দেয়। আপনি এই ফিচার চালু করলে, আপনার অ্যাপে সাইন-ইন করতে চাওয়া ব্যবহারকারীরা TOTP-র জন্য অনুরোধ দেখতে পাবেন। এটি তৈরি করতে, তাদের অবশ্যই এমন একটি Authenticator অ্যাপ ব্যবহার করতে হবে যা বৈধ TOTP কোড তৈরি করতে পারে, যেমন Google Authenticator।
শুরু করার আগে
MFA কাজ করে এমন অন্তত একটি পরিষেবা প্রদানকারী চালু করুন। মনে রাখবেন, নিম্নলিখিতগুলি বাদ দিয়ে সব পরিষেবা প্রদানকারী MFA-কে সাপোর্ট করে:
- ফোন যাচাইকরণ
- পরিচয় গোপন রাখা অথরাইজেশন
- কাস্টম অথ টোকেন
- Apple Game Center
আপনার অ্যাপ ব্যবহারকারীর ইমেল আইডি যাচাই করছে কিনা তা নিশ্চিত করুন। MFA-এর জন্য ইমেল যাচাইকরণ প্রয়োজন। এর ফলে, কোনও খারাপ উদ্দেশ্য নিয়ে কাজ করা ব্যক্তি নিজের মালিকানাধীন নয় এমন ইমেল আইডি দিয়ে কোনও পরিষেবায় রেজিস্টার করতে এবং তারপর দ্বিতীয় ধাপের যাচাইকরণ যোগ করে ইমেল আইডির আসল মালিককে লক-আউট করতে পারে না।
আপনি আগে থেকে এটি না করে থাকলে, Firebase JavaScript SDK ইনস্টল করুন।
TOTP MFA শুধুমাত্র মডুলার Web 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 কাজ করে। তবে, পার্টি ও মানুষের উত্তর দেওয়ার সময়ের মধ্যে ক্লক ড্রিফ্টকে অ্যাডজাস্ট করতে, আপনি 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 কাজ করে। তবে, পার্টি ও মানুষের উত্তর দেওয়ার সময়ের মধ্যে ক্লক ড্রিফ্টকে অ্যাডজাস্ট করতে, আপনি TOTP পরিষেবা কনফিগার করে, যাতে এটি সংলগ্ন উইন্ডো থেকে TOTP গ্রহণ করতে পারে।
এনরোলমেন্ট প্যাটার্ন বেছে নিন
আপনার অ্যাপে বহু-স্তরীয় যাচাইকরণ প্রয়োজন কিনা এবং কীভাবে ও কখন ব্যবহারকারীদের এনরোল করবেন তা আপনি বেছে নিতে পারবেন। কিছু সাধারণ প্যাটার্নের মধ্যে নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত:
রেজিস্ট্রেশনের অংশ হিসেবে ব্যবহারকারীর সেকেন্ড ফ্যাক্টর এনরোল করুন। আপনার অ্যাপের সব ব্যবহারকারীর জন্য বহু-স্তরীয় যাচাইকরণ প্রয়োজন হলে এই পদ্ধতি ব্যবহার করুন।
রেজিস্ট্রেশনের সময় দ্বিতীয় ফ্যাক্টর এনরোল করার জন্য এড়িয়ে যাওয়া যায় এমন বিকল্প অফার করুন। আপনার অ্যাপে বহু-স্তরীয় যাচাইকরণ চালু করার জন্য উৎসাহিত করতে চান, কিন্তু এটি বাধ্যতামূলক করতে না চাইলে, আপনি এই পদ্ধতি ব্যবহার করতে পারেন।
সাইন-আপ স্ক্রিনের পরিবর্তে ব্যবহারকারীর অ্যাকাউন্ট বা প্রোফাইল ম্যানেজমেন্ট পৃষ্ঠা থেকে দ্বিতীয় ধাপের যাচাইকরণ যোগ করার সুবিধা প্রদান করুন। এর ফলে রেজিস্ট্রেশন প্রসেস চলাকালীন সমস্যা কমে যায়, তবে এর পাশাপাশি নিরাপত্তা-সংবেদনশীল ব্যবহারকারীদের জন্য মাল্টি-ফ্যাক্টর যাচাইকরণ উপলভ্য থাকে।
ব্যবহারকারী যখন আরও বেশি নিরাপত্তা সংক্রান্ত প্রয়োজনীয়তা সহ ফিচার অ্যাক্সেস করতে চান, তখন ক্রমবর্ধমানভাবে দ্বিতীয় ফ্যাক্টর যোগ করতে হবে।
TOTP MFA-তে ব্যবহারকারীদের এনরোল করা
আপনার অ্যাপের জন্য দ্বিতীয় যাচাইকরণ পদ্ধতি হিসেবে TOTP MFA চালু করার পরে, TOTP MFA-তে ব্যবহারকারীদের এনরোল করার জন্য ক্লায়েন্ট-সাইড লজিক প্রয়োগ করুন:
প্রয়োজনীয় 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 );ব্যবহারকারীকে সিক্রেটটি দেখান এবং তাকে নিজের Authenticator অ্যাপে এটি লিখতে প্রম্পট করুন।
অনেক Authenticator অ্যাপের সাহায্যে, ব্যবহারকারীরা Google Authenticator-এর সাথে মানানসই কী URI-এর প্রতিনিধিত্বকারী QR কোড স্ক্যান করে দ্রুত নতুন TOTP সিক্রেট যোগ করতে পারেন। এই উদ্দেশ্যে QR কোড তৈরি করতে,
generateQrCodeUrl()-এর মাধ্যমে URI তৈরি করুন এবং তারপরে আপনার পছন্দের QR কোড লাইব্রেরি ব্যবহার করে এটি এনকোড করুন। যেমন:const totpUri = totpSecret.generateQrCodeUrl( currentUser.email, "Your App's Name" ); await QRExampleLib.toCanvas(totpUri, qrElement);আপনি QR কোড দেখান বা না দেখান, সবসময় সিক্রেট কী দেখান যাতে QR কোড পড়তে পারে না এমন Authenticator অ্যাপ কাজ করতে পারে:
// Also display this key: const secret = totpSecret.secretKey;ব্যবহারকারী তার Authenticator অ্যাপে গোপনীয় কী যোগ করার পরে, এটি 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 ব্যবহার করে ব্যবহারকারীদের সাইন-ইন করাতে, নিম্নলিখিত কোড ব্যবহার করুন:
প্রয়োজনীয় 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 ব্যবহার করতে চাইলে, তাকে নিজের Authenticator অ্যাপে দেখানো 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-এর মাধ্যমে প্রোগ্রাম করা হয়।