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

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

बहु-स्तरीय पुष्टि (MFA) से आपके ऐप्लिकेशन की सुरक्षा बढ़ जाती है. हमलावरों को पासवर्ड और सोशल मीडिया खातों के साथ छेड़छाड़ करती है, तो मैसेज को रोकना और मुश्किल हो जाता है.

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

  1. बहु-स्तरीय पुष्टि (MFA) की सुविधा देने वाली कम से कम एक कंपनी चालू करें. फ़ोन से पुष्टि, पहचान छिपाकर पुष्टि करने, और के अलावा सभी सेवा देने वाली कंपनी MFA का इस्तेमाल करती है Apple Game Center.

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

  3. Android: अगर आपने Firebase कंसोल में जाकर ऐसा करें. अपने क्लाइंट की पुष्टि करना देखें ताकि आपको अपने ऐप्लिकेशन का SHA-256 हैश ढूंढने के बारे में जानकारी मिल सके.

  4. iOS: Xcode में, अपने प्रोजेक्ट के लिए पुश नोटिफ़िकेशन चालू करें और पक्का करें कि आपकी एपीएन पुष्टि कुंजी, Firebase क्लाउड से मैसेज (FCM) के साथ कॉन्फ़िगर की गई है. इसके अलावा, आपको ये काम भी करने होंगे रिमोट सूचनाओं के लिए बैकग्राउंड मोड चालू करें. इस चरण की पूरी जानकारी देखने के लिए, Firebase iOS फ़ोन से पुष्टि करने से जुड़ा दस्तावेज़ देखें.

  5. वेब: पक्का करें कि आपने Firebase कंसोल पर अपने ऐप्लिकेशन डोमेन को OAuth रीडायरेक्ट डोमेन.

बहु-स्तरीय पुष्टि (MFA) की सुविधा चालू करना

  1. पुष्टि करने की सुविधा > साइन इन करने का तरीका में जोड़ा गया है.

  2. बेहतर सेक्शन में, एसएमएस के लिए बहु-स्तरीय पुष्टि (MFA) चालू करें.

    आपको वे फ़ोन नंबर भी डालने चाहिए, जिनसे आप अपने ऐप्लिकेशन का परीक्षण करना चाहते हैं. हालांकि, टेस्ट फ़ोन नंबर रजिस्टर करना ज़रूरी नहीं है, लेकिन डेवलपमेंट के दौरान थ्रॉटलिंग से बचें.

  3. अगर आपने पहले से अपने ऐप्लिकेशन के डोमेन को अनुमति नहीं दी है, तो उसे अनुमति वाले डोमेन में जोड़ें की सूची दिखेगी.पुष्टि करने की प्रक्रिया > सेटिंग के पेज पर क्लिक करें.

रजिस्ट्रेशन का पैटर्न चुनना

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

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

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

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

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

पुष्टि करने का दूसरा चरण रजिस्टर करना

किसी उपयोगकर्ता के लिए कोई नया सेकंडरी फ़ैक्टर रजिस्टर करने के लिए:

  1. उपयोगकर्ता की फिर से पुष्टि करें.

  2. उपयोगकर्ता से उसका फ़ोन नंबर डालने के लिए कहें.

  3. उपयोगकर्ता के लिए एक से ज़्यादा तरीकों वाला सेशन पाएं:

    final multiFactorSession = await user.multiFactor.getSession();
    
  4. मल्टी-फ़ैक्टर सेशन और कॉलबैक की मदद से, इस फ़ोन नंबर की पुष्टि करें:

    await FirebaseAuth.instance.verifyPhoneNumber(
      multiFactorSession: multiFactorSession,
      phoneNumber: phoneNumber,
      verificationCompleted: (_) {},
      verificationFailed: (_) {},
      codeSent: (String verificationId, int? resendToken) async {
        // The SMS verification code has been sent to the provided phone number.
        // ...
      },
      codeAutoRetrievalTimeout: (_) {},
    ); 
    
  5. एसएमएस कोड भेजने के बाद, उपयोगकर्ता से कोड की पुष्टि करने के लिए कहें:

    final credential = PhoneAuthProvider.credential(
      verificationId: verificationId,
      smsCode: smsCode,
    );
    
  6. रजिस्टर करने की प्रोसेस पूरी करें:

    await user.multiFactor.enroll(
      PhoneMultiFactorGenerator.getAssertion(
        credential,
      ),
    );
    

यहां दिए गए कोड में, दूसरे फ़ैक्टर को रजिस्टर करने का पूरा उदाहरण दिया गया है:

  final session = await user.multiFactor.getSession();
  final auth = FirebaseAuth.instance;
  await auth.verifyPhoneNumber(
    multiFactorSession: session,
    phoneNumber: phoneController.text,
    verificationCompleted: (_) {},
    verificationFailed: (_) {},
    codeSent: (String verificationId, int? resendToken) async {
      // See `firebase_auth` example app for a method of retrieving user's sms code: 
      // https://github.com/firebase/flutterfire/blob/master/packages/firebase_auth/firebase_auth/example/lib/auth.dart#L591
      final smsCode = await getSmsCodeFromUser(context);

      if (smsCode != null) {
        // Create a PhoneAuthCredential with the code
        final credential = PhoneAuthProvider.credential(
          verificationId: verificationId,
          smsCode: smsCode,
        );

        try {
          await user.multiFactor.enroll(
            PhoneMultiFactorGenerator.getAssertion(
              credential,
            ),
          );
        } on FirebaseAuthException catch (e) {
          print(e.message);
        }
      }
    },
    codeAutoRetrievalTimeout: (_) {},
  );

बधाई हो! आपने इसके लिए दूसरा प्रमाणीकरण कारक सफलतापूर्वक रजिस्टर किया है एक उपयोगकर्ता.

दूसरे चरण से उपयोगकर्ताओं को साइन इन करना

दो-तरीकों से मैसेज (एसएमएस) की मदद से पुष्टि करने वाले उपयोगकर्ता को साइन इन करने के लिए:

  1. पहले चरण से उपयोगकर्ता को साइन इन करें. इसके बाद, FirebaseAuthMultiFactorException अपवाद. इस गड़बड़ी में रिज़ॉल्वर का इस्तेमाल किया जा सकता है. इसकी मदद से, उपयोगकर्ता के रजिस्टर किए गए दूसरे फ़ैक्टर की जानकारी ली जा सकती है. इसमें ऐसा सेशन भी शामिल होता है जो उपयोगकर्ता को सही तरीके से साबित कर सकता है पुष्टि करने का काम पहला कारक से किया गया है.

    उदाहरण के लिए, अगर उपयोगकर्ता ने सबसे पहले ईमेल और पासवर्ड पर सेट किया था:

    try {
      await _auth.signInWithEmailAndPassword(
          email: emailController.text,
          password: passwordController.text,
      );
      // User is not enrolled with a second factor and is successfully
      // signed in.
      // ...
    } on FirebaseAuthMultiFactorException catch (e) {
      // The user is a multi-factor user. Second factor challenge is required
      final resolver = e.resolver
      // ...
    }
    
  2. अगर उपयोगकर्ता ने कई सेकंडरी फ़ैक्टर रजिस्टर किए हैं, तो उससे पूछें कि किसकी इस्तेमाल करने के लिए:

    final session = e.resolver.session;
    
    final hint = e.resolver.hints[selectedHint];
    
  3. संकेत के साथ उपयोगकर्ता के फ़ोन पर पुष्टि करने के लिए एक मैसेज भेजें और मल्टी-फ़ैक्टर सेशन:

    await FirebaseAuth.instance.verifyPhoneNumber(
      multiFactorSession: session,
      multiFactorInfo: hint,
      verificationCompleted: (_) {},
      verificationFailed: (_) {},
      codeSent: (String verificationId, int? resendToken) async {
        // ...
      },
      codeAutoRetrievalTimeout: (_) {},
    );
    
  4. पुष्टि करने के दूसरे तरीके को पूरा करने के लिए, resolver.resolveSignIn() पर कॉल करें:

    final smsCode = await getSmsCodeFromUser(context);
    if (smsCode != null) {
      // Create a PhoneAuthCredential with the code
      final credential = PhoneAuthProvider.credential(
        verificationId: verificationId,
        smsCode: smsCode,
      );
    
      try {
        await e.resolver.resolveSignIn(
          PhoneMultiFactorGenerator.getAssertion(credential)
        );
      } on FirebaseAuthException catch (e) {
        print(e.message);
      }
    }
    

यहां दिया गया कोड, एक से ज़्यादा तरीकों से साइन इन करने वाले उपयोगकर्ता के लिए साइन इन करने का पूरा उदाहरण दिखाता है:

try {
  await _auth.signInWithEmailAndPassword(
    email: emailController.text,
    password: passwordController.text,
  );
} on FirebaseAuthMultiFactorException catch (e) {
  setState(() {
    error = '${e.message}';
  });
  final firstHint = e.resolver.hints.first;
  if (firstHint is! PhoneMultiFactorInfo) {
    return;
  }
  await FirebaseAuth.instance.verifyPhoneNumber(
    multiFactorSession: e.resolver.session,
    multiFactorInfo: firstHint,
    verificationCompleted: (_) {},
    verificationFailed: (_) {},
    codeSent: (String verificationId, int? resendToken) async {
      // See `firebase_auth` example app for a method of retrieving user's sms code: 
      // https://github.com/firebase/flutterfire/blob/master/packages/firebase_auth/firebase_auth/example/lib/auth.dart#L591
      final smsCode = await getSmsCodeFromUser(context);

      if (smsCode != null) {
        // Create a PhoneAuthCredential with the code
        final credential = PhoneAuthProvider.credential(
          verificationId: verificationId,
          smsCode: smsCode,
        );

        try {
          await e.resolver.resolveSignIn(
            PhoneMultiFactorGenerator.getAssertion(
              credential,
            ),
          );
        } on FirebaseAuthException catch (e) {
          print(e.message);
        }
      }
    },
    codeAutoRetrievalTimeout: (_) {},
  );
} catch (e) {
  ...
} 

बधाई हो! आपने बहु-स्तरीय जानकारी (MFA) का इस्तेमाल करके किसी उपयोगकर्ता के खाते में साइन इन कर लिया है पुष्टि करने के लिए.

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