Microsoft और C++ का उपयोग करके प्रमाणित करें

आप एंड टू एंड साइन-इन प्रवाह को पूरा करने के लिए फायरबेस एसडीके का उपयोग करके अपने ऐप में वेब-आधारित जेनेरिक OAuth लॉगिन को एकीकृत करके अपने उपयोगकर्ताओं को Microsoft Azure सक्रिय निर्देशिका जैसे OAuth प्रदाताओं का उपयोग करके Firebase के साथ प्रमाणित करने दे सकते हैं। चूँकि इस प्रवाह के लिए फ़ोन-आधारित फ़ायरबेस SDK के उपयोग की आवश्यकता होती है, यह केवल Android और Apple प्लेटफ़ॉर्म पर समर्थित है।

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

  1. अपने C++ प्रोजेक्ट में Firebase जोड़ें
  2. फायरबेस कंसोल में, ऑथ सेक्शन खोलें।
  3. साइन इन विधि टैब पर, Microsoft प्रदाता को सक्षम करें।
  4. उस प्रदाता के डेवलपर कंसोल से क्लाइंट आईडी और क्लाइंट सीक्रेट को प्रदाता कॉन्फ़िगरेशन में जोड़ें:
    1. Microsoft OAuth क्लाइंट को पंजीकृत करने के लिए, क्विकस्टार्ट में दिए गए निर्देशों का पालन करें: Azure सक्रिय निर्देशिका v2.0 एंडपॉइंट के साथ एक ऐप पंजीकृत करें । ध्यान दें कि यह समापन बिंदु Microsoft व्यक्तिगत खातों के साथ-साथ Azure सक्रिय निर्देशिका खातों का उपयोग करके साइन-इन का समर्थन करता है। Azure सक्रिय निर्देशिका v2.0 के बारे में और जानें
    2. इन प्रदाताओं के साथ ऐप्स पंजीकृत करते समय, अपने प्रोजेक्ट के लिए *.firebaseapp.com डोमेन को अपने ऐप के रीडायरेक्ट डोमेन के रूप में पंजीकृत करना सुनिश्चित करें।
  5. सहेजें पर क्लिक करें.

firebase::auth::Auth क्लास तक पहुंचें

Auth क्लास सभी एपीआई कॉल के लिए प्रवेश द्वार है।
  1. प्रामाणिक और ऐप हेडर फ़ाइलें जोड़ें:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. अपने इनिशियलाइज़ेशन कोड में, एक firebase::App क्लास बनाएं।
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. अपने firebase::App के लिए firebase::auth::Auth क्लास प्राप्त करें। App और Auth के बीच वन-टू-वन मैपिंग है।
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

फायरबेस एसडीके के साथ साइन-इन प्रवाह को संभालें

फायरबेस एसडीके के साथ साइन-इन प्रवाह को संभालने के लिए, इन चरणों का पालन करें:

  1. Microsoft के लिए उपयुक्त प्रदाता आईडी के साथ कॉन्फ़िगर किए गए FederatedOAuthProviderData का एक उदाहरण बनाएं।

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
    
  2. वैकल्पिक : अतिरिक्त कस्टम OAuth पैरामीटर निर्दिष्ट करें जिन्हें आप OAuth अनुरोध के साथ भेजना चाहते हैं।

    // Prompt user to re-authenticate to Microsoft.
    provider_data.custom_parameters["prompt"] = "login";
    
    // Target specific email with login hint.
    provider_data.custom_parameters["login_hint"] =
        "user@firstadd.onmicrosoft.com";
    

    Microsoft द्वारा समर्थित पैरामीटरों के लिए, Microsoft OAuth दस्तावेज़ देखें। ध्यान दें कि आप setCustomParameters() के साथ Firebase-आवश्यक पैरामीटर पास नहीं कर सकते। ये पैरामीटर क्लाइंट_आईडी , रिस्पॉन्स_टाइप , रीडायरेक्ट_यूरी , स्टेट , स्कोप और रिस्पॉन्स_मोड हैं

    किसी विशेष Azure AD टैनेंट के केवल उपयोगकर्ताओं को एप्लिकेशन में साइन इन करने की अनुमति देने के लिए, Azure AD टैनेंट के अनुकूल डोमेन नाम या टैनेंट के GUID पहचानकर्ता का उपयोग किया जा सकता है। यह कस्टम पैरामीटर ऑब्जेक्ट में "किरायेदार" फ़ील्ड निर्दिष्ट करके किया जा सकता है।

    // Optional "tenant" parameter in case you are using an Azure AD tenant.
    // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com'
    // or "common" for tenant-independent tokens.
    // The default value is "common".
    provider_data.custom_parameters["tenant"] ="TENANT_ID";
    
  3. वैकल्पिक : मूल प्रोफ़ाइल से परे अतिरिक्त OAuth 2.0 स्कोप निर्दिष्ट करें जिसे आप प्रमाणीकरण प्रदाता से अनुरोध करना चाहते हैं।

    provider_data.scopes.push_back("mail.read");
    provider_data.scopes.push_back("calendars.read");
    

    अधिक जानने के लिए, Microsoft अनुमतियाँ और सहमति दस्तावेज़ देखें।

  4. एक बार जब आपका प्रदाता डेटा कॉन्फ़िगर हो जाए, तो FederatedOAuthProvider बनाने के लिए इसका उपयोग करें।

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. प्रामाणिक प्रदाता ऑब्जेक्ट का उपयोग करके फायरबेस से प्रमाणित करें। ध्यान दें कि अन्य फायरबेसऑथ ऑपरेशंस के विपरीत, यह एक वेब दृश्य को पॉप अप करके आपके यूआई को नियंत्रित करेगा जिसमें उपयोगकर्ता अपने क्रेडेंशियल दर्ज कर सकते हैं।

    साइन इन प्रवाह शुरू करने के लिए, SignInWithProvider कॉल करें:

    firebase::Future<firebase::auth::AuthResult> result =
      auth->SignInWithProvider(provider_data);
    

    तब आपका एप्लिकेशन प्रतीक्षा कर सकता है या Future पर कॉलबैक दर्ज कर सकता है

    OAuth एक्सेस टोकन का उपयोग करके, आप Microsoft ग्राफ़ API को कॉल कर सकते हैं।

    फायरबेस ऑथ द्वारा समर्थित अन्य प्रदाताओं के विपरीत, माइक्रोसॉफ्ट एक फोटो यूआरएल प्रदान नहीं करता है और इसके बजाय, प्रोफाइल फोटो के लिए बाइनरी डेटा को माइक्रोसॉफ्ट ग्राफ एपीआई के माध्यम से अनुरोध करना पड़ता है।

  6. जबकि उपरोक्त उदाहरण साइन-इन प्रवाह पर ध्यान केंद्रित करते हैं, आपके पास LinkWithProvider उपयोग करके Microsoft Azure सक्रिय निर्देशिका प्रदाता को मौजूदा उपयोगकर्ता से लिंक करने की क्षमता भी है। उदाहरण के लिए, आप कई प्रदाताओं को एक ही उपयोगकर्ता से लिंक कर सकते हैं और उन्हें किसी एक के साथ साइन इन करने की अनुमति दे सकते हैं।

    firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
    
  7. उसी पैटर्न का उपयोग ReauthenticateWithProvider के साथ किया जा सकता है जिसका उपयोग संवेदनशील संचालन के लिए ताज़ा क्रेडेंशियल प्राप्त करने के लिए किया जा सकता है जिनके लिए हाल ही में लॉगिन की आवश्यकता होती है।

    firebase::Future<firebase::auth::AuthResult> result =
      user.ReauthenticateWithProvider(provider_data);
    

    तब आपका एप्लिकेशन प्रतीक्षा कर सकता है या Future पर कॉलबैक दर्ज कर सकता है

अगले कदम

किसी उपयोगकर्ता द्वारा पहली बार साइन इन करने के बाद, एक नया उपयोगकर्ता खाता बनाया जाता है और क्रेडेंशियल्स से लिंक किया जाता है - यानी, उपयोगकर्ता नाम और पासवर्ड, फोन नंबर, या ऑथ प्रदाता जानकारी - जिस उपयोगकर्ता के साथ साइन इन किया जाता है। यह नया खाता आपके फायरबेस प्रोजेक्ट के हिस्से के रूप में संग्रहीत है, और इसका उपयोग आपके प्रोजेक्ट के प्रत्येक ऐप में उपयोगकर्ता की पहचान करने के लिए किया जा सकता है, भले ही उपयोगकर्ता कैसे भी साइन इन करता हो।

  • अपने ऐप्स में, आप उपयोगकर्ता की मूल प्रोफ़ाइल जानकारी firebase::auth::User ऑब्जेक्ट से प्राप्त कर सकते हैं:

    firebase::auth::User user = auth->current_user();
    if (user.is_valid()) {
      std::string name = user.display_name();
      std::string email = user.email();
      std::string photo_url = user.photo_url();
      // The user's ID, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server,
      // if you have one. Use firebase::auth::User::Token() instead.
      std::string uid = user.uid();
    }
    
  • अपने फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप साइन-इन किए गए उपयोगकर्ता की अद्वितीय उपयोगकर्ता आईडी को auth वेरिएबल से प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।

आप किसी मौजूदा उपयोगकर्ता खाते से प्रमाणीकरण प्रदाता क्रेडेंशियल्स को लिंक करके उपयोगकर्ताओं को एकाधिक प्रमाणीकरण प्रदाताओं का उपयोग करके अपने ऐप में साइन इन करने की अनुमति दे सकते हैं।

किसी उपयोगकर्ता को साइन आउट करने के लिए, SignOut() पर कॉल करें:

auth->SignOut();