আপনি যদি Firebase Authentication with Identity Platform আপগ্রেড করে থাকেন, তাহলে আপনার অ্যাপে সময়-ভিত্তিক ওয়ান-টাইম পাসওয়ার্ড (TOTP) মাল্টি-ফ্যাক্টর অথেনটিকেশন (MFA) যোগ করতে পারবেন।
Firebase Authentication with Identity Platform আপনাকে মাল্টি-ফ্যাক্টর অথেনটিকেশনের (MFA) জন্য একটি অতিরিক্ত ফ্যাক্টর হিসেবে TOTP ব্যবহার করার সুযোগ দেয়। আপনি যখন এই ফিচারটি চালু করেন, তখন আপনার অ্যাপে সাইন ইন করার চেষ্টাকারী ব্যবহারকারীরা একটি TOTP-এর জন্য অনুরোধ দেখতে পান। এটি তৈরি করার জন্য, তাদের অবশ্যই এমন একটি অথেনটিকেটর অ্যাপ ব্যবহার করতে হবে যা বৈধ TOTP কোড তৈরি করতে সক্ষম, যেমন গুগল অথেনটিকেটর ।
শুরু করার আগে
অন্তত একজন প্রোভাইডারকে সক্রিয় করুন যিনি এমএফএ সমর্থন করেন। উল্লেখ্য যে, নিম্নলিখিত প্রোভাইডারগুলি ছাড়া বাকি সবাই এমএফএ সমর্থন করে:
- ফোন প্রমাণীকরণ
- বেনামী প্রমাণীকরণ
- কাস্টম প্রমাণীকরণ টোকেন
- অ্যাপল গেম সেন্টার
আপনার অ্যাপ যেন ব্যবহারকারীর ইমেল ঠিকানা যাচাই করে, তা নিশ্চিত করুন। মাল্টি-ফ্যাক্টর অথেনটিকেশন (MFA) এর জন্য ইমেল যাচাইকরণ প্রয়োজন। এর ফলে, ক্ষতিকারক ব্যক্তিরা অন্যের মালিকানাধীন ইমেল ঠিকানা ব্যবহার করে কোনো পরিষেবার জন্য নিবন্ধন করতে পারে না এবং পরবর্তীতে দ্বিতীয় একটি ধাপ যোগ করে সেই ইমেল ঠিকানার প্রকৃত মালিককে পরিষেবা থেকে বাদ দিতে পারে না।
যদি এখনও তা না করে থাকেন, তাহলে Firebase Apple SDK ইনস্টল করুন।
TOTP MFA শুধুমাত্র Apple SDK ভার্সন v10.12.0 ও তার উপরের ভার্সনে এবং শুধুমাত্র iOS-এ সমর্থিত।
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-তে নথিভুক্ত করতে ক্লায়েন্ট-সাইড লজিক প্রয়োগ করুন:
ব্যবহারকারীকে পুনরায় প্রমাণীকরণ করুন।
প্রমাণীকৃত ব্যবহারকারীর জন্য একটি TOTP সিক্রেট তৈরি করুন:
// Generate a TOTP secret. guard let mfaSession = try? await currentUser.multiFactor.session() else { return } guard let totpSecret = try? await TOTPMultiFactorGenerator.generateSecret(with: mfaSession) else { return } // Display the secret to the user and prompt them to enter it into their // authenticator app. (See the next step.)ব্যবহারকারীকে গোপনীয় তথ্যটি দেখান এবং তাদের অথেন্টিকেটর অ্যাপে সেটি প্রবেশ করাতে বলুন:
// Display this key: let secret = totpSecret.sharedSecretKey()সিক্রেট কী প্রদর্শন করার পাশাপাশি, আপনি এটিকে ডিভাইসের ডিফল্ট অথেনটিকেটর অ্যাপে স্বয়ংক্রিয়ভাবে যুক্ত করার চেষ্টা করতে পারেন। এটি করার জন্য, একটি Google Authenticator-উপযোগী কী URI তৈরি করুন, এবং সেটি
openInOTPApp(withQRCodeURL:)-এ পাস করুন:let otpAuthUri = totpSecret.generateQRCodeURL( withAccountName: currentUser.email ?? "default account", issuer: "Your App Name") totpSecret.openInOTPApp(withQRCodeURL: otpAuthUri)ব্যবহারকারী তাদের অথেন্টিকেটর অ্যাপে সিক্রেট যোগ করার পর, অ্যাপটি TOTP তৈরি করা শুরু করবে।
ব্যবহারকারীকে তার অথেন্টিকেটর অ্যাপে প্রদর্শিত TOTP টাইপ করতে বলুন এবং এটি ব্যবহার করে MFA তালিকাভুক্তি চূড়ান্ত করুন:
// Ask the user for a verification code from the authenticator app. let verificationCode = // Code from user input. // Finalize the enrollment. let multiFactorAssertion = TOTPMultiFactorGenerator.assertionForEnrollment( with: totpSecret, oneTimePassword: verificationCode) do { try await currentUser.multiFactor.enroll( with: multiFactorAssertion, displayName: "TOTP") } catch { // Wrong or expired OTP. Re-prompt the user. }
দ্বিতীয় ফ্যাক্টর দিয়ে ব্যবহারকারীদের সাইন ইন করুন
TOTP MFA ব্যবহার করে ব্যবহারকারীদের সাইন ইন করতে, নিম্নলিখিত কোডটি ব্যবহার করুন:
আপনি যদি এমএফএ (MFA) ব্যবহার না করতেন, তাহলে যেভাবে করতেন, সেভাবেই
signIn(with...:)- মেথডগুলোর একটিকে কল করুন (উদাহরণস্বরূপ,signIn(withEmail:password:))। যদি মেথডটিsecondFactorRequiredকোডসহ কোনো এরর (error) দেখায়, তাহলে আপনার অ্যাপের এমএফএ (MFA) ফ্লো চালু করুন।do { let authResult = try await Auth.auth().signIn(withEmail: email, password: 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 let error as AuthErrorCode where error.code == .secondFactorRequired { // Initiate your second factor sign-in flow. (See next step.) // ... } catch { // Other auth error. throw error }আপনার অ্যাপের এমএফএ (MFA) ফ্লো-তে প্রথমে ব্যবহারকারীকে দ্বিতীয় ফ্যাক্টরটি বেছে নিতে বলা উচিত, যা তিনি ব্যবহার করতে চান। একটি
MultiFactorResolverইনস্ট্যান্সেরhintsপ্রপার্টি পরীক্ষা করে আপনি সমর্থিত দ্বিতীয় ফ্যাক্টরগুলোর একটি তালিকা পেতে পারেন:let mfaKey = AuthErrorUserInfoMultiFactorResolverKey guard let resolver = error.userInfo[mfaKey] as? MultiFactorResolver else { return } let enrolledFactors = resolver.hints.map(\.displayName)যদি ব্যবহারকারী TOTP ব্যবহার করতে চান, তাহলে তাদের অথেন্টিকেটর অ্যাপে প্রদর্শিত TOTP-টি টাইপ করতে বলুন এবং সেটি ব্যবহার করে সাইন ইন করুন:
let multiFactorInfo = resolver.hints[selectedIndex] switch multiFactorInfo.factorID { case TOTPMultiFactorID: let otpFromAuthenticator = // OTP typed by the user. let assertion = TOTPMultiFactorGenerator.assertionForSignIn( withEnrollmentID: multiFactorInfo.uid, oneTimePassword: otpFromAuthenticator) do { let authResult = try await resolver.resolveSignIn(with: assertion) } catch { // Wrong or expired OTP. Re-prompt the user. } default: return }
TOTP MFA থেকে নিবন্ধন বাতিল করুন
এই অংশে বর্ণনা করা হয়েছে, কোনো ব্যবহারকারী TOTP MFA থেকে নিবন্ধন বাতিল করলে তা কীভাবে সামলাতে হবে।
যদি কোনো ব্যবহারকারী একাধিক মাল্টি-ফ্যাক্টর অথেনটিকেশন (MFA) বিকল্পের জন্য সাইন আপ করে থাকেন এবং সর্বশেষ সক্রিয় করা বিকল্পটি থেকে নিবন্ধন বাতিল করেন, তাহলে তিনি একটি auth/user-token-expired পান এবং লগ আউট হয়ে যান। ব্যবহারকারীকে অবশ্যই পুনরায় সাইন ইন করতে হবে এবং তার বিদ্যমান ক্রেডেনশিয়াল—যেমন, ইমেল ঠিকানা এবং পাসওয়ার্ড—যাচাই করতে হবে।
ব্যবহারকারীকে তালিকাভুক্তি থেকে বাদ দিতে, ত্রুটি সামলাতে এবং পুনঃপ্রমাণীকরণ শুরু করতে, নিম্নলিখিত কোডটি ব্যবহার করুন:
guard let currentUser = Auth.auth().currentUser else { return }
// Prompt the user to select a factor to unenroll, from this array:
currentUser.multiFactor.enrolledFactors
// ...
// Unenroll the second factor.
let multiFactorInfo = currentUser.multiFactor.enrolledFactors[selectedIndex]
do {
try await currentUser.multiFactor.unenroll(with: multiFactorInfo)
} catch let error as AuthErrorCode where error.code == .invalidUserToken {
// Second factor unenrolled, but the user was signed out. Re-authenticate
// them.
}
এরপর কী?
- Admin SDK ব্যবহার করে প্রোগ্রাম্যাটিকভাবে মাল্টি-ফ্যাক্টর ব্যবহারকারীদের পরিচালনা করুন ।