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

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

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

আপনি শুরু করার আগে

  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 সংস্করণ 11.6.0 এবং তার উপরে সমর্থিত।

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

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

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

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

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

    ব্যবহারকারী তাদের প্রমাণীকরণকারী অ্যাপে তাদের গোপনীয়তা যোগ করার পরে, এটি TOTPs তৈরি করা শুরু করবে।

  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
        );
    }
}

এরপর কি