अपने iOS ऐप्लिकेशन में TOTP बहु-स्तरीय पुष्टि (MFA) जोड़ें

अगर आपने Identity Platform के साथ Firebase से पुष्टि करने की सुविधा पर अपग्रेड किया है, तो आप समय के हिसाब से एक बार इस्तेमाल होने वाला पासवर्ड जोड़ सकते हैं (TOTP) आपके ऐप्लिकेशन के लिए बहु-स्तरीय पुष्टि (MFA) की सुविधा देता है.

पहचान प्लैटफ़ॉर्म की मदद से Firebase की पुष्टि करने की सुविधा की मदद से, MFA के लिए अतिरिक्त फ़ैक्टर के तौर पर टीओटीपी का इस्तेमाल किया जा सकता है. आसानी से अपने कैलेंडर में जोड़ें. इस ��ुविधा को चालू करते हैं, तो जो उपयोगकर्ता आपके ऐप्लिकेशन में साइन इन करने की कोशिश करते हैं उन्हें टीओटीपी. इसे जनरेट करने के लिए, उपयोगकर्ताओं को पुष्टि करने वाले किसी ऐसे ऐप्लिकेशन का इस्तेमाल करना होगा जो जनरेट करने की सुविधा देता हो मान्य TOTP कोड, जैसे कि Google Authenticator.

शुरू करने से पहले

  1. MFA के साथ काम करने वाली कम से कम एक कंपनी चालू करें. ध्यान दें कि सेवा देने वाली सभी कंपनियां नीचे दिए गए सहायता MFA के अलावा:

    • फ़ोन से पुष्टि
    • अनाम पुष्टि
    • पुष्टि करने वाले कस्टम टोकन
    • Apple गेम सेंटर
  2. पक्का करें कि आपका ऐप्लिकेशन, उपयोगकर्ता के ईमेल पतों की पुष्टि करता है. MFA के लिए ईमेल आवश्यक है पुष्टि करने के लिए. इससे, नुकसान पहुंचाने वाले लोग या ग्रुप किसी सेवा के लिए रजिस्टर नहीं कर पाएंगे ऐसा ईमेल पता देते हैं जिस पर उनका मालिकाना हक नहीं है. इसके बाद, पुष्टि करने का दूसरा चरण जोड़कर ईमेल पते के मालिक के तौर पर अपनी पहचान की पुष्टि करें.

  3. अगर आपने अभी तक ऐसा नहीं किया है, तो Firebase Apple SDK टूल.

    TOTP MFA सिर्फ़ Apple SDK टूल का v10.12.0 वर्शन साथ ही, iOS डिवाइसों पर इसका इस्तेमाल किया जा सकता है.

TOTP MFA चालू करें

TOTP को दूसरे चरण के तौर पर चालू करने के लिए, एडमिन SDK का इस्तेमाल करें या प्रोजेक्ट को कॉल करें कॉन्फ़िगरेशन REST एंडपॉइंट.

एडमिन SDK का इस्तेमाल करने के लिए, ये काम करें:

  1. अगर आपने अभी तक ऐसा नहीं किया है, तो Firebase एडमिन Node.js SDK टूल.

    TOTP MFA सिर्फ़ Firebase एडमिन 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: निकटवर्ती संख्याओं की संख्या टीओटीपी स्वीकार करने के लिए, टाइम-विंडो का इंटरवल, शून्य से दस तक. कॉन्टेंट बनाने डिफ़ॉल्ट संख्या पांच है.

      टीओटीपी यह पक्का करके काम करते हैं कि जब दो पक्षों (प्रोवोसर और पुष्टि करने वाला) एक ही समयसीमा (आम तौर पर 30 सेकंड) में ओटीपी जनरेट करते हैं लंबे समय के लिए उपलब्ध है), वे एक ही पासवर्ड जनरेट करते हैं. हालांकि, घड़ी के समय में बदलाव करने के लिए दोनों पक्षों और मानवीय जवाब देने के समय के बीच ड्रिफ़्ट होते हैं, तो आप 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: टाइम-विंडो की संख्या अंतरालों को, शून्य से दस तक. डिफ़ॉल्ट संख्या पांच है.

    टीओटीपी यह पक्का करके काम करते हैं कि जब दो पक्षों (प्रोवोसर और पुष्टि करने वाला प्रोग्राम के तहत, एक ही समय अवधि (आम तौर पर 30 सेकंड) में ओटीपी जनरेट किए जाते हैं लंबे समय के लिए उपलब्ध है), वे एक ही पासवर्ड जनरेट करते हैं. हालांकि, घड़ी के समय में बदलाव करने के लिए दोनों पक्षों और मानवीय जवाब देने के समय के बीच ड्रिफ़्ट होते हैं, तो आप TOTP को कॉन्फ़िगर कर सकते हैं सेवा का इस्तेमाल करती है.

डिवाइस रजिस्टर करने का कोई पैटर्न चुनें

आपके पास यह चुनने का विकल्प है कि आपके ऐप्लिकेशन के लिए बहु-स्तरीय पुष्टि (MFA) की ज़रूरत है या नहीं. साथ ही, यह भी चुनें कि और उपयोगकर्ताओं को कब रजिस्टर करना है. कुछ सामान्य पैटर्न में ये शामिल हैं:

  • रजिस्ट्रेशन के हिस्से के तौर पर, उपयोगकर्ता के दूसरे चरण को रजिस्टर करें. इसका इस्तेमाल करें का तरीका इस्तेमाल करें.

  • रजिस्ट्रेशन के दौरान दूसरा चरण जोड़ने का विकल्प दें, जिसे स्किप किया जा सके. अगर आपको तो आपको अपने ऐप्लिकेशन में बहु-स्तरीय पुष्टि (MFA) की ज़रूरत नहीं है, लेकिन इस तरीके का इस्तेमाल कर सकते हैं.

  • उपयोगकर्ता के खाते या प्रोफ़ाइल में, पुष्टि करने का दूसरा चरण जोड़ने की सुविधा दें प्रबंधन पेज पर क्लिक करें. इससे कन्वर्ज़न के दौरान दिक्कतें कम हो जाती हैं रजिस्ट्रेशन की प्रक्रिया के साथ-साथ बहु-स्तरीय पुष्टि (MFA) की सुविधा सुरक्षा के लिए संवेदनशील उपयोगकर्ताओं के लिए उपलब्ध है.

  • जब उपयोगकर्ता ऐक्सेस करना चाहे, तब बढ़ोतरी के हिसाब से दूसरा चरण जोड़ना होगा सुविधाओं के बारे में बात करते हैं.

उपयोगकर्ताओं को 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 Authenticator के साथ काम करने वाली कुंजी यूआरआई, और इसे openInOTPApp(withQRCodeURL:) को पास करें:

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

    जब कोई उपयोगकर्ता अपने सीक्रेट को पुष्टि करने वाले ऐप्लिकेशन में जोड़ेगा, तो यह शुरू हो जाएगा TOTP जनरेट कर रहे हैं.

  4. उपयोगकर्ता को, पुष्टि करने वाले ऐप्लिकेशन की म��द से दिखाए गए टीओटीपी को टाइप करने के लिए कहें और 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...:)- तरीके को ठीक वैसे ही कॉल करें जैसे आप ऐसा न कर रहे होते उदाहरण के लिए, 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. अगर उपयोगकर्ता टीओटीपी का इस्तेमाल करना चुनता है, तो उन्हें दिखाया गया टीटीपी टाइप करने के लिए कहें और उसका इस्तेमाल साइन इन करने के लिए करें:

    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.
}

आगे क्या करना है