আপনার iOS অ্যাপে 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 Apple SDK ইনস্টল করুন৷

    TOTP MFA শুধুমাত্র Apple SDK সংস্করণ v10.12.0 এবং তার উপরে এবং শুধুমাত্র iOS-এ সমর্থিত।

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

  2. প্রমাণীকৃত ব্যবহারকারীর জন্য একটি 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.)
    
  3. ব্যবহারকারীর কাছে গোপনটি প্রদর্শন করুন এবং তাদের প্রমাণীকরণকারী অ্যাপে এটি প্রবেশ করতে অনুরোধ করুন:

    // Display this key:
    let secret = totpSecret.sharedSecretKey()
    

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

    let otpAuthUri = totpSecret.generateQRCodeURL(
        withAccountName: currentUser.email ?? "default account",
        issuer: "Your App Name")
    totpSecret.openInOTPApp(withQRCodeURL: otpAuthUri)
    

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

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

  1. signIn(with...:) - একটি পদ্ধতিতে কল করুন যদি আপনি MFA ব্যবহার না করেন (উদাহরণস্বরূপ, signIn(withEmail:password:) )। যদি পদ্ধতিটি secondFactorRequired কোডের সাথে একটি ত্রুটি নিক্ষেপ করে, তাহলে আপনার অ্যাপের 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
    }
    
  2. আপনার অ্যাপের MFA ফ্লো প্রথমে ব্যবহারকারীকে দ্বিতীয় ফ্যাক্টরটি ব্যবহার করতে চান তা বেছে নিতে অনুরোধ করা উচিত। আপনি একটি MultiFactorResolver উদাহরণের hints সম্পত্তি পরীক্ষা করে সমর্থিত দ্বিতীয় কারণগুলির একটি তালিকা পেতে পারেন:

    let mfaKey = AuthErrorUserInfoMultiFactorResolverKey
    guard let resolver = error.userInfo[mfaKey] as? MultiFactorResolver else { return }
    let enrolledFactors = resolver.hints.map(\.displayName)
    
  3. ব্যবহারকারী যদি 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.
}

এরপর কি