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

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

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

তুমি শুরু করার আগে

  1. MFA সমর্থন করে এমন অন্তত একটি প্রদানকারীকে সক্ষম করুন৷ উল্লেখ্য যে নিম্নলিখিত সমর্থনকারী MFA ব্যতীত সমস্ত প্রদানকারী:

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

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

    TOTP MFA শুধুমাত্র Android SDK সংস্করণ v22.1.0 এবং তার উপরে সমর্থিত।

TOTP MFA সক্ষম করুন৷

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

অ্যাডমিন 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. ব্যবহারকারীকে পুনরায় প্রমাণীকরণ করুন।

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

    // Generate a TOTP secret.
    Firebase.auth.currentUser.multiFactor.session
        .addOnSuccessListener { multiFactorSession ->
            TotpMultiFactorGenerator.generateSecret(multiFactorSession)
                .addOnSuccessListener { totpSecret ->
                    // Display the secret to the user and prompt them to
                    // enter it into their authenticator app. (See the next
                    // step.)
                }
        }
    
  3. ব্যবহারকারীর কাছে গোপনটি প্রদর্শন করুন এবং তাদের প্রমাণীকরণকারী অ্যাপে এটি প্রবেশ করতে অনুরোধ করুন:

    // Display this key:
    val secret = totpSecret.sharedSecretKey
    

    গোপন কী প্রদর্শনের পাশাপাশি, আপনি স্বয়ংক্রিয়ভাবে ডিভাইসের ডিফল্ট প্রমাণীকরণকারী অ্যাপে এটি যোগ করার চেষ্টা করতে পারেন। এটি করতে, একটি Google প্রমাণীকরণকারী-সামঞ্জস্যপূর্ণ কী URI তৈরি করুন এবং এটি openInOtpApp() এ পাস করুন :

    val qrCodeUri = totpSecret.generateQrCodeUrl(
        currentUser.email ?: "default account",
        "Your App Name")
    totpSecret.openInOtpApp(qrCodeUri)
    

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

  4. ব্যবহারকারীকে তাদের প্রমাণীকরণকারী অ্যাপ দ্বারা প্রদর্শিত TOTP টাইপ করার জন্য অনুরোধ করুন এবং MFA তালিকাভুক্তি চূড়ান্ত করতে এটি ব্যবহার করুন:

    // Ask the user for a verification code from the authenticator app.
    val verificationCode = // Code from user input.
    
    // Finalize the enrollment.
    val multiFactorAssertion = TotpMultiFactorGenerator
        .getAssertionForEnrollment(totpSecret, verificationCode)
    Firebase.auth.currentUser.multiFactor.enroll(multiFactorAssertion, "TOTP")
        .addOnSuccessListener {
            // Enrollment complete.
        }
    

দ্বিতীয় ফ্যাক্টর দিয়ে ব্যবহারকারীদের সাইন ইন করুন

TOTP MFA দিয়ে ব্যবহারকারীদের সাইন ইন করতে, নিম্নলিখিত কোড ব্যবহার করুন:

  1. আপনি যদি MFA ব্যবহার না করেন তাহলে signInWith - পদ্ধতিগুলির একটিতে কল করুন। (উদাহরণস্বরূপ, signInWithEmailAndPassword() ।) যদি পদ্ধতিটি একটি FirebaseAuthMultiFactorException নিক্ষেপ করে, তাহলে আপনার অ্যাপের MFA ফ্লো শুরু করুন।

    Firebase.auth.signInWithEmailAndPassword(email, password)
        .addOnSuccessListener { result ->
            // 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.)
    
            // ...
        }
        .addOnFailureListener { exception ->
            when (exception) {
                is FirebaseAuthMultiFactorException -> {
                    // Initiate your second factor sign-in flow. (See next step.)
                    // ...
                }
            }
        }
    
  2. আপনার অ্যাপের MFA ফ্লো প্রথমে ব্যবহারকারীকে দ্বিতীয় ফ্যাক্টরটি ব্যবহার করতে চান তা বেছে নিতে অনুরোধ করা উচিত। আপনি একটি MultiFactorResolver উদাহরণের hints সম্পত্তি পরীক্ষা করে সমর্থিত দ্বিতীয় কারণগুলির একটি তালিকা পেতে পারেন:

    val enrolledFactors = exception.resolver.hints.map { it.displayName }
    
  3. ব্যবহারকারী যদি TOTP ব্যবহার করতে চান, তাহলে তাদের প্রমাণীকরণকারী অ্যাপে প্রদর্শিত TOTP টাইপ করতে এবং সাইন ইন করতে এটি ব্যবহার করতে অনুরোধ করুন:

    when (exception.resolver.hints[selectedIndex].factorId) {
        TotpMultiFactorGenerator.FACTOR_ID -> {
            val otpFromAuthenticator = // OTP typed by the user.
            val assertion = TotpMultiFactorGenerator.getAssertionForSignIn(
                exception.resolver.hints[selectedIndex].uid,
                otpFromAuthenticator
            )
            exception.resolver.resolveSignIn(assertion)
                .addOnSuccessListener { result ->
                    // Successfully signed in!
                }
                .addOnFailureListener { resolveError ->
                    // Invalid or expired OTP.
                }
        }
        PhoneMultiFactorGenerator.FACTOR_ID -> {
            // Handle SMS second factor.
        }
    }
    

TOTP MFA থেকে নাম নথিভুক্ত করুন

এই বিভাগটি বর্ণনা করে যে কীভাবে একজন ব্যবহারকারী TOTP MFA থেকে নাম নথিভুক্ত করাকে পরিচালনা করবেন।

যদি একজন ব্যবহারকারী একাধিক MFA বিকল্পের জন্য সাইন আপ করে থাকেন, এবং যদি তারা সাম্প্রতিক সক্রিয় বিকল্প থেকে নাম নথিভুক্ত করেন, তাহলে তারা একটি auth/user-token-expired এবং লগ আউট হয়ে গেছে। ব্যবহারকারীকে অবশ্যই আবার সাইন ইন করতে হবে এবং তাদের বিদ্যমান শংসাপত্রগুলি যাচাই করতে হবে—উদাহরণস্বরূপ, একটি ইমেল ঠিকানা এবং পাসওয়ার্ড৷

ব্যবহারকারীকে আনএনরোল করতে, ত্রুটিটি পরিচালনা করতে এবং পুনরায় প্রমাণীকরণ ট্রিগার করতে, নিম্নলিখিত কোডটি ব্যবহার করুন:

Firebase.auth.currentUser.multiFactor.unenroll(mfaEnrollmentId)
    .addOnSuccessListener {
        // Second factor unenrolled.
    }
    .addOnFailureListener { exception ->
        when (exception) {
            is FirebaseAuthInvalidUserException -> {
                // Second factor unenrolled. 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.
                val credential = EmailAuthProvider.getCredential(email, password)
                currentUser.reauthenticate(credential)
                    .addOnSuccessListener { 
                        // Success!
                    }
                    .addOnFailureListener { 
                        // Bad email address and password combination.
                    }
            }
        }
    }

এরপর কি