आईडी टोकन की पुष्टि करें

अगर आपका Firebase क्लाइंट ऐप्लिकेशन किसी कस्टम बैकएंड सर्वर के साथ संपर्क करता है, तो आपको उस सर्वर पर साइन-इन किए हुए मौजूदा उपयोगकर्ता की पहचान करनी पड़ सकती है. सुरक्षित तरीके से ऐसा करने के लिए, साइन-इन करने के बाद, एचटीटीपीएस का इस्तेमाल करके उपयोगकर्ता का आईडी टोकन अपने सर्वर पर भेजें. इसके बाद, सर्वर पर, आईडी टोकन के भरोसेमंद और सही होने की पुष्टि करें और उससे uid को वापस पाएं. इस तरीके से भेजे गए uid का इस्तेमाल करके, अपने सर्वर पर साइन-इन किए हुए मौजूदा उपयोगकर्ता की पहचान की जा सकती है.

वेब कंटेनर इंस्टॉल करने से पहले

Firebase एडमिन SDK टूल की मदद से आईडी टोकन की पुष्टि करने के लिए, आपके पास सेवा खाता होना चाहिए. सेवा खाते के साथ 'एडमिन SDK' को शुरू करने के तरीके के बारे में ज़्यादा जानकारी के लिए, एडमिन SDK टूल को सेटअप करने के निर्देशों का पालन करें.

क्लाइंट के आईडी टोकन वापस पाएं

जब किसी उपयोगकर्ता या डिवाइस में सही तरीके से साइन इन हो जाता है, तो Firebase एक आईडी टोकन बनाता है, जिससे खास तौर पर उनकी पहचान होती है और उन्हें Firebase रीयल टाइम डेटाबेस और Cloud Storage जैसे कई संसाधनों का ऐक्सेस मिलता है. अपने कस्टम बैकएंड सर्वर पर उपयोगकर्ता या डिवाइस की पहचान करने के लिए, उस आईडी टोकन का फिर से इस्तेमाल किया जा सकता है. क्लाइंट से आईडी टोकन फिर से पाने के लिए, पक्का करें कि उपयोगकर्ता ने साइन इन किया हुआ है. इसके बाद, साइन इन किए हुए उपयोगकर्ता से आईडी टोकन पाएं:

iOS और उसके बाद के वर्शन

Objective-C
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
          // ...
}];
Swift
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
  // ...
}

Android

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();
            }
        }
    });

Unity

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
  // ...
});

C++

firebase::auth::User user = auth->current_user();
if (user.is_valid()) {
  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
});

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

Firebase एडमिन SDK टूल का इस्तेमाल करके, आईडी टोकन की पुष्टि करें

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
  });

Java

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

Python

# 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)

C#

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

आईडी टोकन की पुष्टि करने के लिए, प्रोजेक्ट आईडी ज़रूरी है. Firebase एडमिन SDK टूल, इनमें से किसी एक तरीके से प्रोजेक्ट आईडी पाने की कोशिश करता है:

  • अगर SDK टूल को किसी projectId ऐप्लिकेशन के विकल्प के साथ शुरू किया गया था, तो SDK टूल उस विकल्प की वैल्यू का इस्तेमाल करता है.
  • अगर SDK टूल को सेवा खाते के क्रेडेंशियल के साथ शुरू किया गया था, तो SDK टूल, सेवा खाते के JSON ऑब्जेक्ट के project_id फ़ील्ड का इस्तेमाल करता है.
  • अगर GOOGLE_CLOUD_PROJECT एनवायरमेंट वैरिएबल सेट है, तो SDK टूल इसकी वैल्यू का इस्तेमाल प्रोजेक्ट आईडी के तौर पर करता है. यह एनवायरमेंट वैरिएबल, App Engine और Compute Engine जैसे Google के इन्फ़्रास्ट्रक्चर पर चलने वाले कोड के लिए उपलब्ध है.

तीसरे पक्ष की JWT लाइब्रेरी का इस्तेमाल करके, आईडी टोकन की पुष्टि करें

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

पुष्टि करें कि आईडी टोकन का हेडर, इन शर्तों के मुताबिक है:

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

पुष्टि करें कि आईडी टोकन का पेलोड इन शर्तों के मुताबिक है:

आईडी टोकन पेलोड से जुड़े दावे
exp समाप्ति समय आने वाले समय की होनी चाहिए. समय को UNIX epoch के बाद से सेकंड में मापा जाता है.
iat इस समय जारी हुआ मौजूदा समय से पहले की तारीख होनी चाहिए. समय को UNIX epoch के बाद से सेकंड में मापा जाता है.
aud ऑडियंस यह आपका Firebase प्रोजेक्ट आईडी होना चाहिए. यह आपके Firebase प्रोजेक्ट का यूनीक आइडेंटिफ़ायर होता है. इसे प्रोजेक्ट के कंसोल के यूआरएल में देखा जा सकता है.
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 से सार्वजनिक पासकोड लें और सिग्नेचर की पुष्टि करने के लिए, JWT लाइब्रेरी इस्तेमाल करें. सार्वजनिक पासकोड को कब रीफ़्रेश करना है, यह जानने के लिए उस एंडपॉइंट से रिस्पॉन्स के Cache-Control हेडर में max-age वैल्यू का इस्तेमाल करें.

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