Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

आईडी टोकन सत्यापित करें

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

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

फायरबेस एडमिन एसडीके के साथ आईडी टोकन सत्यापित करने के लिए, आपके पास एक सेवा खाता होना चाहिए। का पालन करें नियंत्रक SDK सेटअप निर्देशों कैसे एक सेवा खाते के साथ नियंत्रक SDK प्रारंभ करने के बारे में अधिक जानकारी के लिए।

ग्राहकों पर आईडी टोकन प्राप्त करें

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

आईओएस

उद्देश्य सी
FIRUser *currentUser = [FIRAuth auth].currentUser;
[currentUser getIDTokenForcingRefresh:YES
                           completion:^(NSString *_Nullable idToken,
                                        NSError *_Nullable error) {
          if (error) {
            // Handle error
            return;
          }

          // Send token to your backend via HTTPS
          // ...
}];
तीव्र
let currentUser = FIRAuth.auth()?.currentUser
currentUser?.getIDTokenForcingRefresh(true) { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}

एंड्रॉयड

FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
        public void onComplete(@NonNull Task<GetTokenResult> task) {
            if (task.isSuccessful()) {
                String idToken = task.getResult().getToken();
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException();
            }
        }
    });

एकता

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
user.TokenAsync(true).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("TokenAsync was canceled.");
   return;
  }

  if (task.IsFaulted) {
    Debug.LogError("TokenAsync encountered an error: " + task.Exception);
    return;
  }

  string idToken = task.Result;

  // Send token to your backend via HTTPS
  // ...
});

सी++

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  firebase::Future<std::string> idToken = user->GetToken(true);

  // Send token to your backend via HTTPS
  // ...
}

वेब

firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
  // Send token to your backend via HTTPS
  // ...
}).catch(function(error) {
  // Handle error
});

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

Firebase व्यवस्थापक SDK का उपयोग करके आईडी टोकन सत्यापित करें

फायरबेस एडमिन एसडीके में आईडी टोकन को सत्यापित करने और डिकोड करने के लिए एक अंतर्निहित विधि है। यदि प्रदान किए गए आईडी टोकन का प्रारूप सही है, समाप्त नहीं हुआ है, और ठीक से हस्ताक्षरित है, तो विधि डीकोडेड आईडी टोकन लौटाती है। आप प्राप्त कर सकते हैं uid उपयोगकर्ता या डीकोड टोकन से डिवाइस की।

का पालन करें नियंत्रक SDK सेटअप निर्देशों के एक सेवा खाते के साथ नियंत्रक SDK प्रारंभ करने में। फिर, का उपयोग verifyIdToken() टोकन एक आईडी सत्यापित करने के लिए विधि:

Node.js

// idToken comes from the client app
getAuth()
  .verifyIdToken(idToken)
  .then((decodedToken) => {
    const uid = decodedToken.uid;
    // ...
  })
  .catch((error) => {
    // Handle error
  });

जावा

// idToken comes from the client app (shown above)
FirebaseToken decodedToken = FirebaseAuth.getInstance().verifyIdToken(idToken);
String uid = decodedToken.getUid();

अजगर

# id_token comes from the client app (shown above)

decoded_token = auth.verify_id_token(id_token)
uid = decoded_token['uid']

जाना

client, err := app.Auth(ctx)
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

token, err := client.VerifyIDToken(ctx, idToken)
if err != nil {
	log.Fatalf("error verifying ID token: %v\n", err)
}

log.Printf("Verified ID token: %v\n", token)

सी#

FirebaseToken decodedToken = await FirebaseAuth.DefaultInstance
    .VerifyIdTokenAsync(idToken);
string uid = decodedToken.Uid;

आईडी टोकन सत्यापन के लिए प्रोजेक्ट आईडी की आवश्यकता होती है। फायरबेस एडमिन एसडीके निम्नलिखित विधियों में से एक के माध्यम से एक प्रोजेक्ट आईडी प्राप्त करने का प्रयास करता है:

  • यदि एसडीके एक स्पष्ट साथ प्रारंभ किया गया था projectId एप्लिकेशन विकल्प, एसडीके कि विकल्प के मूल्य का उपयोग करता है।
  • यदि एसडीके सेवा खाता क्रेडेंशियल से प्रारंभ किया गया था, एसडीके का उपयोग करता project_id सेवा खाते JSON ऑब्जेक्ट के क्षेत्र।
  • यदि GOOGLE_CLOUD_PROJECT वातावरण चर सेट किया गया है, एसडीके परियोजना आईडी के रूप में अपने मूल्य का उपयोग करता है। यह पर्यावरण चर Google के बुनियादी ढांचे जैसे ऐप इंजन और कंप्यूट इंजन पर चलने वाले कोड के लिए उपलब्ध है।

तृतीय-पक्ष JWT लाइब्रेरी का उपयोग करके आईडी टोकन सत्यापित करें

अगर आपका बैकएंड ऐसी भाषा में है जो Firebase Admin SDK द्वारा समर्थित नहीं है, तो भी आप आईडी टोकन सत्यापित कर सकते हैं। सबसे पहले, अपनी भाषा के लिए एक तीसरे पक्ष के जेडब्ल्यूटी पुस्तकालय । फिर, आईडी टोकन के हेडर, पेलोड और हस्ताक्षर को सत्यापित करें।

सत्यापित करें कि आईडी टोकन का हेडर निम्नलिखित बाधाओं के अनुरूप है:

आईडी टोकन हैडर दावा
alg कलन विधि "RS256"
kid कुंजी आईडी पर सूचीबद्ध सार्वजनिक कुंजियों में से एक के अनुरूप होना चाहिए https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com

सत्यापित करें कि आईडी टोकन का पेलोड निम्नलिखित बाधाओं के अनुरूप है:

आईडी टोकन पेलोड दावे
exp समय सीमा समाप्ति समय भविष्य में होना चाहिए। UNIX युग के बाद से समय सेकंड में मापा जाता है।
iat जारी-समय पर अतीत में होना चाहिए। UNIX युग के बाद से समय सेकंड में मापा जाता है।
aud दर्शक आपका फायरबेस प्रोजेक्ट आईडी होना चाहिए, जो आपके फायरबेस प्रोजेक्ट के लिए विशिष्ट पहचानकर्ता है, जो उस प्रोजेक्ट के कंसोल के यूआरएल में पाया जा सकता है।
iss जारीकर्ता होना चाहिए "https://securetoken.google.com/<projectId>" , जहां <projectId> एक ही परियोजना के लिए इस्तेमाल किया आईडी है aud ऊपर।
sub विषय एक गैर खाली स्ट्रिंग होना चाहिए और होना चाहिए uid उपयोगकर्ता या डिवाइस के।
auth_time प्रमाणीकरण समय अतीत में होना चाहिए। वह समय जब उपयोगकर्ता ने प्रमाणित किया।

अंत में, यह सुनिश्चित करें कि आईडी टोकन निजी कुंजी टोकन का करने के लिए इसी द्वारा हस्ताक्षर किए गए kid का दावा। से सार्वजनिक कुंजी पकड़ो https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com और हस्ताक्षर को सत्यापित करने के लिए एक जेडब्ल्यूटी पुस्तकालय का उपयोग करें। के मान का उपयोग करें max-age में Cache-Control कि अंत बिंदु से प्रतिक्रिया के शीर्षक को पता है जब सार्वजनिक कुंजी ताज़ा करने के लिए।

सब से ऊपर सत्यापन सफल रहे हैं, तो आप विषय (उपयोग कर सकते हैं sub आईडी के रूप में टोकन का) uid इसी उपयोगकर्ता या डिवाइस के।