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

आप अपने उपयोगकर्ताओं को Microsoft Azure Active Directory जैसे OAuth प्रदाताओं का उपयोग करके अपने ऐप में वेब-आधारित जेनेरिक OAuth लॉगिन को एकीकृत करके Firebase SDK का उपयोग करके एंड टू एंड साइन-इन प्रवाह को पूरा करने दे सकते हैं।

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

Microsoft खातों (Azure Active Directory और व्यक्तिगत Microsoft खाते) का उपयोग करने वाले उपयोगकर्ताओं में साइन इन करने के लिए, आपको पहले अपने Firebase प्रोजेक्ट के लिए Microsoft को साइन-इन प्रदाता के रूप में सक्षम करना होगा:

  1. अपने Android प्रोजेक्ट में Firebase जोड़ें

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

Firebase SDK के साथ साइन-इन प्रवाह को प्रबंधित करें

यदि आप एक Android ऐप बना रहे हैं, तो अपने Microsoft खातों का उपयोग करके अपने उपयोगकर्ताओं को Firebase से प्रमाणित करने का सबसे आसान तरीका है, Firebase Android SDK के साथ संपूर्ण साइन-इन प्रवाह को संभालना।

Firebase Android SDK के साथ साइन-इन प्रवाह को संभालने के लिए, इन चरणों का पालन करें:

  1. प्रदाता आईडी microsoft.com के साथ अपने निर्माता का उपयोग करके OAuthProvider का एक उदाहरण बनाएं।

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("microsoft.com");
    
  2. वैकल्पिक : अतिरिक्त कस्टम OAuth पैरामीटर निर्दिष्ट करें जिन्हें आप OAuth अनुरोध के साथ भेजना चाहते हैं।

    // Force re-consent.
    provider.addCustomParameter("prompt", "consent");
    
    // Target specific email with login hint.
    provider.addCustomParameter("login_hint", "user@firstadd.onmicrosoft.com");
    

    Microsoft द्वारा समर्थित पैरामीटर के लिए, Microsoft OAuth दस्तावेज़ देखें। ध्यान दें कि आप setCustomParameters() के साथ Firebase-आवश्यक पैरामीटर पास नहीं कर सकते। ये पैरामीटर हैं client_id , response_type , redirect_uri , State , scope और response_mode

    किसी विशेष 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.addCustomParameter("tenant", "TENANT_ID");
    
  3. वैकल्पिक : मूल प्रोफ़ाइल से परे अतिरिक्त OAuth 2.0 स्कोप निर्दिष्ट करें जिसका आप प्रमाणीकरण प्रदाता से अनुरोध करना चाहते हैं।

    List<String> scopes =
        new ArrayList<String>() {
          {
            add("mail.read");
            add("calendars.read");
          }
        };
    provider.setScopes(scopes);
    

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

  4. OAuth प्रदाता ऑब्जेक्ट का उपयोग करके Firebase से प्रमाणित करें। ध्यान दें कि अन्य FirebaseAuth संचालनों के विपरीत, यह कस्टम Chrome टैब को पॉप अप करके आपके UI को नियंत्रित करेगा। परिणामस्वरूप, अपनी गतिविधि को OnSuccessListener और OnFailureListener में संदर्भित न करें जिसे आप संलग्न करते हैं क्योंकि जब ऑपरेशन UI शुरू करता है तो वे तुरंत अलग हो जाएंगे।

    आपको पहले जांच करनी चाहिए कि क्या आपको पहले ही कोई प्रतिक्रिया मिली है। इस पद्धति के माध्यम से साइन इन करने से आपकी गतिविधि पृष्ठभूमि में आ जाती है, जिसका अर्थ है कि साइन इन प्रवाह के दौरान सिस्टम द्वारा इसे पुनः प्राप्त किया जा सकता है। यह सुनिश्चित करने के लिए कि यदि ऐसा होता है तो आप उपयोगकर्ता को फिर से प्रयास करने के लिए नहीं कहते हैं, आपको यह जांचना चाहिए कि कोई परिणाम पहले से मौजूद है या नहीं।

    यह जांचने के लिए कि क्या कोई परिणाम लंबित है, getPendingAuthResult पर कॉल करें:

    Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult();
    if (pendingResultTask != null) {
      // There's something already here! Finish the sign-in for your user.
      pendingResultTask
          .addOnSuccessListener(
              new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                  // User is signed in.
                  // IdP data available in
                  // authResult.getAdditionalUserInfo().getProfile().
                  // The OAuth access token can also be retrieved:
                  // authResult.getCredential().getAccessToken().
                  // The OAuth ID token can also be retrieved:
                  // authResult.getCredential().getIdToken().
                }
              })
          .addOnFailureListener(
              new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                  // Handle failure.
                }
              });
    } else {
      // There's no pending result so you need to start the sign-in flow.
      // See below.
    }
    

    साइन इन फ्लो शुरू करने के लिए startActivityForSignInWithProvider पर कॉल करें:

    firebaseAuth
        .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is signed in.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
                // The OAuth ID token can also be retrieved:
                // authResult.getCredential().getIdToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    सफलतापूर्वक पूरा होने पर, प्रदाता से जुड़े OAuth एक्सेस टोकन को लौटाए गए OAuthCredential ऑब्जेक्ट से पुनर्प्राप्त किया जा सकता है।

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

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

    OAuth पहुंच टोकन के अलावा, उपयोगकर्ता के OAuth आईडी टोकन को OAuthCredential ऑब्जेक्ट से भी पुनर्प्राप्त किया जा सकता है। आईडी टोकन में sub दावा ऐप-विशिष्ट है और फ़ायरबेस ऑथ द्वारा उपयोग किए गए फ़ेडरेटेड उपयोगकर्ता पहचानकर्ता से मेल नहीं खाएगा और user.getProviderData().get(0).getUid() के माध्यम से पहुंच योग्य होगा। इसके बजाय oid दावा क्षेत्र का उपयोग किया जाना चाहिए। साइन-इन करने के लिए Azure AD टैनेंट का उपयोग करते समय, oid दावा सटीक मिलान होगा। हालांकि गैर-किरायेदार मामले के लिए, oid फ़ील्ड गद्देदार है। फ़ेडरेटेड आईडी 4b2eabcdefghijkl के लिए, oid का फ़ॉर्म 00000000-0000-0000-4b2e-abcdefghijkl होगा।

  5. जबकि उपरोक्त उदाहरण साइन-इन प्रवाह पर ध्यान केंद्रित करते हैं, आपके पास Microsoft प्रदाता को startActivityForLinkWithProvider का उपयोग करके किसी मौजूदा उपयोगकर्ता से जोड़ने की क्षमता भी है। उदाहरण के लिए, आप एक से अधिक प्रदाताओं को एक ही उपयोगकर्ता से लिंक कर सकते हैं जिससे वे दोनों में से किसी के साथ साइन इन कर सकें।

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForLinkWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // Microsoft credential is linked to the current user.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
                // The OAuth ID token can also be retrieved:
                // authResult.getCredential().getIdToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
    
  6. उसी पैटर्न का उपयोग startActivityForReauthenticateWithProvider के साथ किया जा सकता है जिसका उपयोग संवेदनशील संचालन के लिए नए क्रेडेंशियल्स को पुनः प्राप्त करने के लिए किया जा सकता है जिसके लिए हाल ही में लॉगिन की आवश्यकता होती है।

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is re-authenticated with fresh tokens and
                // should be able to perform sensitive operations
                // like account deletion and email or password
                // update.
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

अगले कदम

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

  • अपने ऐप्स में, आप उपयोगकर्ता की मूलभूत प्रोफ़ाइल जानकारी FirebaseUser ऑब्जेक्ट से प्राप्त कर सकते हैं। उपयोगकर्ता प्रबंधित करें देखें।

  • अपने फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप auth चर से साइन-इन किए गए उपयोगकर्ता की अद्वितीय उपयोगकर्ता आईडी प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।

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

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

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()