আপনার ওয়েব অ্যাপে TOTP মাল্টি-ফ্যাক্টর প্রমাণীকরণ যোগ করুন

যদি আপনি Firebase Authentication with Identity Platform এ আপগ্রেড করে থাকেন, তাহলে আপনি আপনার অ্যাপে সময়-ভিত্তিক ওয়ান-টাইম পাসওয়ার্ড (TOTP) মাল্টি-ফ্যাক্টর অথেনটিকেশন (MFA) যোগ করতে পারেন।

Firebase Authentication with Identity Platform আপনাকে MFA-এর জন্য অতিরিক্ত ফ্যাক্টর হিসেবে একটি TOTP ব্যবহার করতে দেয়। আপনি যখন এই বৈশিষ্ট্যটি সক্ষম করেন, তখন আপনার অ্যাপে সাইন ইন করার চেষ্টাকারী ব্যবহারকারীরা একটি TOTP-এর অনুরোধ দেখতে পান। এটি তৈরি করতে, তাদের অবশ্যই একটি অথেনটিকেশনকারী অ্যাপ ব্যবহার করতে হবে যা বৈধ TOTP কোড তৈরি করতে সক্ষম, যেমন Google Authenticator

শুরু করার আগে

  1. কমপক্ষে একটি প্রদানকারী সক্ষম করুন যা MFA সমর্থন করে। মনে রাখবেন যে নিম্নলিখিতগুলি ছাড়া সমস্ত প্রদানকারী MFA সমর্থন করে:

    • ফোন অনুমোদন
    • বেনামী প্রমাণীকরণ
    • কাস্টম প্রমাণীকরণ টোকেন
    • অ্যাপল গেম সেন্টার
  2. আপনার অ্যাপ ব্যবহারকারীর ইমেল ঠিকানা যাচাই করছে কিনা তা নিশ্চিত করুন। MFA-এর ইমেল যাচাইকরণ প্রয়োজন। এটি ক্ষতিকারক ব্যক্তিদের এমন কোনও ইমেল ঠিকানা দিয়ে পরিষেবার জন্য নিবন্ধন করতে বাধা দেয় যা তাদের নিজস্ব নয় এবং তারপরে দ্বিতীয় ফ্যাক্টর যোগ করে ইমেল ঠিকানার প্রকৃত মালিককে লক আউট করতে বাধা দেয়।

  3. যদি আপনি ইতিমধ্যেই এটি না করে থাকেন, তাহলে Firebase JavaScript SDK ইনস্টল করুন।

    TOTP MFA শুধুমাত্র মডুলার ওয়েব SDK, v9.19.1 এবং তার পরবর্তী সংস্করণগুলিতে সমর্থিত।

TOTP MFA সক্ষম করুন

দ্বিতীয় ফ্যাক্টর হিসেবে TOTP সক্ষম করতে, Admin SDK ব্যবহার করুন অথবা প্রকল্প কনফিগারেশন REST এন্ডপয়েন্টে কল করুন।

Admin SDK ব্যবহার করতে, নিম্নলিখিতগুলি করুন:

  1. যদি আপনি ইতিমধ্যেই এটি না করে থাকেন, তাহলে Firebase Admin Node.js SDK ইনস্টল করুন।

    TOTP MFA শুধুমাত্র Firebase Admin Node.js SDK ভার্সন ১১.৬.০ এবং তার পরবর্তী ভার্সনে সমর্থিত।

  2. নিম্নলিখিতটি চালান:

    import { getAuth } from 'firebase-admin/auth';
    
    getAuth().projectConfigManager().updateProjectConfig(
    {
          multiFactorConfig: {
              providerConfigs: [{
                  state: "ENABLED",
                  totpProviderConfig: {
                      adjacentIntervals: NUM_ADJ_INTERVALS
                  }
              }]
          }
    })
    

    নিম্নলিখিতগুলি প্রতিস্থাপন করুন:

    • NUM_ADJ_INTERVALS : শূন্য থেকে দশ পর্যন্ত TOTP গ্রহণ করার জন্য সংলগ্ন সময়-উইন্ডো ব্যবধানের সংখ্যা। ডিফল্ট হল পাঁচটি।

      TOTP গুলি নিশ্চিত করে কাজ করে যে যখন দুটি পক্ষ (প্রোভার এবং ভ্যালিডেটর) ​​একই সময় উইন্ডোর মধ্যে (সাধারণত 30 সেকেন্ড দীর্ঘ) 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 গুলি নিশ্চিত করে কাজ করে যে যখন দুটি পক্ষ (প্রোভার এবং ভ্যালিডেটর) ​​একই সময় উইন্ডোর মধ্যে (সাধারণত 30 সেকেন্ড দীর্ঘ) OTP তৈরি করে, তখন তারা একই পাসওয়ার্ড তৈরি করে। তবে, পক্ষগুলির মধ্যে ঘড়ির ড্রিফট এবং মানুষের প্রতিক্রিয়া সময়ের সমন্বয় করার জন্য, আপনি TOTP পরিষেবাটি সংলগ্ন উইন্ডো থেকে TOTP গ্রহণ করার জন্য কনফিগার করতে পারেন।

একটি তালিকাভুক্তির ধরণ বেছে নিন

আপনার অ্যাপের মাল্টি-ফ্যাক্টর অথেনটিকেশনের প্রয়োজন কিনা এবং কীভাবে এবং কখন আপনার ব্যবহারকারীদের তালিকাভুক্ত করবেন তা আপনি বেছে নিতে পারেন। কিছু সাধারণ প্যাটার্নের মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:

  • নিবন্ধনের অংশ হিসেবে ব্যবহারকারীর দ্বিতীয় ফ্যাক্টরটি নথিভুক্ত করুন। যদি আপনার অ্যাপের সকল ব্যবহারকারীর জন্য মাল্টি-ফ্যাক্টর প্রমাণীকরণের প্রয়োজন হয় তবে এই পদ্ধতিটি ব্যবহার করুন।

  • রেজিস্ট্রেশনের সময় দ্বিতীয় ফ্যাক্টর নথিভুক্ত করার জন্য একটি স্কিপেবল বিকল্প অফার করুন। আপনি যদি আপনার অ্যাপে মাল্টি-ফ্যাক্টর প্রমাণীকরণকে উৎসাহিত করতে চান কিন্তু প্রয়োজন না করেন, তাহলে আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন।

  • সাইন-আপ স্ক্রিনের পরিবর্তে ব্যবহারকারীর অ্যাকাউন্ট বা প্রোফাইল পরিচালনা পৃষ্ঠা থেকে দ্বিতীয় ফ্যাক্টর যোগ করার ক্ষমতা প্রদান করুন। এটি নিবন্ধন প্রক্রিয়ার সময় ঘর্ষণ কমিয়ে দেয়, একই সাথে নিরাপত্তা-সংবেদনশীল ব্যবহারকারীদের জন্য মাল্টি-ফ্যাক্টর প্রমাণীকরণ উপলব্ধ করে।

  • ব্যবহারকারী যখন বর্ধিত নিরাপত্তা প্রয়োজনীয়তা সহ বৈশিষ্ট্যগুলি অ্যাক্সেস করতে চান তখন ক্রমবর্ধমানভাবে দ্বিতীয় ফ্যাক্টর যোগ করতে হবে।

TOTP MFA-তে ব্যবহারকারীদের তালিকাভুক্ত করুন

আপনার অ্যাপের জন্য দ্বিতীয় ফ্যাক্টর হিসেবে TOTP MFA সক্ষম করার পরে, TOTP MFA-তে ব্যবহারকারীদের তালিকাভুক্ত করার জন্য ক্লায়েন্ট-সাইড লজিক প্রয়োগ করুন:

  1. প্রয়োজনীয় MFA ক্লাস এবং ফাংশনগুলি আমদানি করুন:

    import {
      multiFactor,
      TotpMultiFactorGenerator,
      TotpSecret,
      getAuth,
    } from "firebase/auth";
    
  2. ব্যবহারকারীকে পুনরায় প্রমাণীকরণ করুন।

  3. প্রমাণিত ব্যবহারকারীর জন্য একটি TOTP গোপনীয়তা তৈরি করুন:

    // Generate a TOTP secret.
    const multiFactorSession = await multiFactor(currentUser).getSession();
    const totpSecret = await TotpMultiFactorGenerator.generateSecret(
      multiFactorSession
    );
    
  4. ব্যবহারকারীকে গোপন তথ্যটি দেখান এবং তাদের প্রমাণীকরণকারী অ্যাপে এটি প্রবেশ করতে বলুন।

    অনেক প্রমাণীকরণকারী অ্যাপের সাহায্যে, ব্যবহারকারীরা দ্রুত একটি QR কোড স্ক্যান করে নতুন TOTP গোপনীয়তা যুক্ত করতে পারেন যা একটি Google প্রমাণীকরণকারী-সামঞ্জস্যপূর্ণ কী 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 তৈরি করা শুরু করবে।

  5. ব্যবহারকারীকে তাদের প্রমাণীকরণকারী অ্যাপে প্রদর্শিত 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 ব্যবহার করে ব্যবহারকারীদের সাইন ইন করতে, নিম্নলিখিত কোডটি ব্যবহার করুন:

  1. প্রয়োজনীয় MFA ক্লাস এবং ফাংশনগুলি আমদানি করুন:

    import {
        getAuth,
        getMultiFactorResolver,
        TotpMultiFactorGenerator,
    } from "firebase/auth";
    
  2. 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;
        }
    }
    
  3. আপনার অ্যাপের MFA প্রবাহ প্রথমে ব্যবহারকারীকে দ্বিতীয় ফ্যাক্টরটি বেছে নিতে অনুরোধ করবে যা তারা ব্যবহার করতে চায়। আপনি একটি MultiFactorResolver ইনস্ট্যান্সের hints সম্পত্তি পরীক্ষা করে সমর্থিত দ্বিতীয় ফ্যাক্টরের একটি তালিকা পেতে পারেন:

    const mfaResolver = getMultiFactorResolver(getAuth(), error);
    const enrolledFactors = mfaResolver.hints.map(info => info.displayName);
    
  4. যদি ব্যবহারকারী 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
        );
    }
}

এরপর কি?