कस्टम टोकन बनाएं

फायरबेस आपको सुरक्षित JSON वेब टोकन (JWTs) का उपयोग करके उपयोगकर्ताओं या उपकरणों को प्रमाणित करने की अनुमति देकर प्रमाणीकरण पर पूर्ण नियंत्रण देता है। आप इन टोकन को अपने सर्वर पर जेनरेट करते हैं, उन्हें क्लाइंट डिवाइस पर वापस भेजते हैं, और फिर signInWithCustomToken() विधि के माध्यम से प्रमाणित करने के लिए उनका उपयोग करते हैं।

इसे प्राप्त करने के लिए, आपको एक सर्वर एंडपॉइंट बनाना होगा जो साइन-इन क्रेडेंशियल स्वीकार करता है - जैसे उपयोगकर्ता नाम और पासवर्ड - और, यदि क्रेडेंशियल मान्य हैं, तो एक कस्टम JWT लौटाता है। आपके सर्वर से लौटाए गए कस्टम JWT का उपयोग क्लाइंट डिवाइस द्वारा फायरबेस ( आईओएस + , एंड्रॉइड , वेब ) के साथ प्रमाणित करने के लिए किया जा सकता है। एक बार प्रमाणित होने के बाद, इस पहचान का उपयोग अन्य फायरबेस सेवाओं, जैसे फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज तक पहुंचने पर किया जाएगा। इसके अलावा, JWT की सामग्री आपके रीयलटाइम डेटाबेस सुरक्षा नियमों में auth ऑब्जेक्ट में और आपके क्लाउड स्टोरेज सुरक्षा नियमों में request.auth ऑब्जेक्ट में उपलब्ध होगी।

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

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

कस्टम टोकन हस्ताक्षरित JWT हैं जहां हस्ताक्षर करने के लिए उपयोग की जाने वाली निजी कुंजी Google सेवा खाते से संबंधित होती है। Google सेवा खाते को निर्दिष्ट करने के कई तरीके हैं जिनका उपयोग कस्टम टोकन पर हस्ताक्षर करने के लिए फायरबेस एडमिन एसडीके द्वारा किया जाना चाहिए:

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

सेवा खाता JSON फ़ाइल का उपयोग करना

सेवा खाता JSON फ़ाइलों में सेवा खातों (आरएसए निजी कुंजी सहित) से संबंधित सभी जानकारी होती है। इन्हें फायरबेस कंसोल से डाउनलोड किया जा सकता है। सेवा खाता JSON फ़ाइल के साथ एडमिन SDK को प्रारंभ करने के तरीके के बारे में अधिक जानकारी के लिए एडमिन SDK सेटअप निर्देशों का पालन करें।

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

व्यवस्थापक SDK को एक सेवा खाता खोजने दें

यदि आपका कोड Google द्वारा प्रबंधित वातावरण में तैनात किया गया है, तो व्यवस्थापक SDK कस्टम टोकन पर हस्ताक्षर करने के साधन को स्वचालित रूप से खोजने का प्रयास कर सकता है:

  • यदि आपका कोड जावा, पायथन या गो के लिए ऐप इंजन मानक वातावरण में तैनात किया गया है, तो एडमिन एसडीके कस्टम टोकन पर हस्ताक्षर करने के लिए उस वातावरण में मौजूद ऐप आइडेंटिटी सेवा का उपयोग कर सकता है। ऐप आइडेंटिटी सेवा Google ऐप इंजन द्वारा आपके ऐप के लिए प्रावधानित सेवा खाते का उपयोग करके डेटा पर हस्ताक्षर करती है।

  • यदि आपका कोड किसी अन्य प्रबंधित वातावरण (उदाहरण के लिए Google क्लाउड फ़ंक्शंस, Google कंप्यूट इंजन) में तैनात किया गया है, तो फायरबेस एडमिन एसडीके स्थानीय मेटाडेटा सर्वर से एक सेवा खाता आईडी स्ट्रिंग को स्वचालित रूप से खोज सकता है। खोजी गई सेवा खाता आईडी का उपयोग दूरस्थ रूप से टोकन पर हस्ताक्षर करने के लिए IAM सेवा के साथ संयोजन में किया जाता है।

इन हस्ताक्षर विधियों का उपयोग करने के लिए, एसडीके को Google एप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल के साथ प्रारंभ करें और सेवा खाता आईडी स्ट्रिंग निर्दिष्ट न करें:

नोड.जे.एस

initializeApp();

जावा

FirebaseApp.initializeApp();

अजगर

default_app = firebase_admin.initialize_app()

जाना

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

सी#

FirebaseApp.Create();

स्थानीय रूप से समान कोड का परीक्षण करने के लिए, एक सेवा खाता JSON फ़ाइल डाउनलोड करें और इसे इंगित करने के लिए GOOGLE_APPLICATION_CREDENTIALS पर्यावरण चर सेट करें।

यदि फायरबेस एडमिन एसडीके को एक सेवा खाता आईडी स्ट्रिंग की खोज करनी है, तो वह ऐसा तब करता है जब आपका कोड पहली बार एक कस्टम टोकन बनाता है। परिणाम को कैश किया जाता है और बाद के टोकन हस्ताक्षर कार्यों के लिए पुन: उपयोग किया जाता है। स्वतः खोजी गई सेवा खाता आईडी आमतौर पर Google क्लाउड द्वारा प्रदान किए गए डिफ़ॉल्ट सेवा खातों में से एक है:

स्पष्ट रूप से निर्दिष्ट सेवा खाता आईडी की तरह, काम करने के लिए कस्टम टोकन निर्माण के लिए ऑटो-डिस्कवर सेवा खाता आईडी में iam.serviceAccounts.signBlob अनुमति होनी चाहिए। डिफ़ॉल्ट सेवा खातों को आवश्यक अनुमतियाँ प्रदान करने के लिए आपको Google क्लाउड कंसोल के IAM और व्यवस्थापक अनुभाग का उपयोग करना पड़ सकता है। अधिक विवरण के लिए नीचे समस्या निवारण अनुभाग देखें।

सेवा खाता आईडी का उपयोग करना

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

सेवा खाता आईडी Google क्लाउड कंसोल में, या डाउनलोड किए गए सेवा खाते JSON फ़ाइल के client_email फ़ील्ड में पाया जा सकता है। सेवा खाता आईडी ऐसे ईमेल पते हैं जिनका प्रारूप निम्न है: <client-id>@<project-id>.iam.gserviceaccount.com । वे फ़ायरबेस और Google क्लाउड प्रोजेक्ट में सेवा खातों की विशिष्ट पहचान करते हैं।

एक अलग सेवा खाता आईडी का उपयोग करके कस्टम टोकन बनाने के लिए, नीचे दिखाए अनुसार एसडीके प्रारंभ करें:

नोड.जे.एस

initializeApp({
  serviceAccountId: 'my-client-id@my-project-id.iam.gserviceaccount.com',
});

जावा

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setServiceAccountId("my-client-id@my-project-id.iam.gserviceaccount.com")
    .build();
FirebaseApp.initializeApp(options);

अजगर

options = {
    'serviceAccountId': 'my-client-id@my-project-id.iam.gserviceaccount.com',
}
firebase_admin.initialize_app(options=options)

जाना

conf := &firebase.Config{
	ServiceAccountID: "my-client-id@my-project-id.iam.gserviceaccount.com",
}
app, err := firebase.NewApp(context.Background(), conf)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

सी#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
    ServiceAccountId = "my-client-id@my-project-id.iam.gserviceaccount.com",
});

सेवा खाता आईडी संवेदनशील जानकारी नहीं हैं और इसलिए उनका प्रदर्शन अप्रासंगिक है। हालाँकि, निर्दिष्ट सेवा खाते के साथ कस्टम टोकन पर हस्ताक्षर करने के लिए, फायरबेस एडमिन एसडीके को एक दूरस्थ सेवा को लागू करना होगा। इसके अलावा, आपको यह भी सुनिश्चित करना होगा कि एडमिन एसडीके इस कॉल को करने के लिए जिस सेवा खाते का उपयोग कर रहा है - आमतौर पर {project-name}@appspot.gserviceaccount.com - के पास iam.serviceAccounts.signBlob अनुमति है। अधिक विवरण के लिए नीचे समस्या निवारण अनुभाग देखें।

फायरबेस एडमिन एसडीके का उपयोग करके कस्टम टोकन बनाएं

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

नोड.जे.एस

const uid = 'some-uid';

getAuth()
  .createCustomToken(uid)
  .then((customToken) => {
    // Send token back to client
  })
  .catch((error) => {
    console.log('Error creating custom token:', error);
  });

जावा

String uid = "some-uid";

String customToken = FirebaseAuth.getInstance().createCustomToken(uid);
// Send token back to client

अजगर

uid = 'some-uid'

custom_token = auth.create_custom_token(uid)

जाना

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

token, err := client.CustomToken(ctx, "some-uid")
if err != nil {
	log.Fatalf("error minting custom token: %v\n", err)
}

log.Printf("Got custom token: %v\n", token)

सी#

var uid = "some-uid";

string customToken = await FirebaseAuth.DefaultInstance.CreateCustomTokenAsync(uid);
// Send token back to client

आप वैकल्पिक रूप से कस्टम टोकन में शामिल किए जाने वाले अतिरिक्त दावे भी निर्दिष्ट कर सकते हैं। उदाहरण के लिए, नीचे, कस्टम टोकन में एक premiumAccount फ़ील्ड जोड़ा गया है, जो आपके सुरक्षा नियमों में auth / request.auth ऑब्जेक्ट में उपलब्ध होगा:

नोड.जे.एस

const userId = 'some-uid';
const additionalClaims = {
  premiumAccount: true,
};

getAuth()
  .createCustomToken(userId, additionalClaims)
  .then((customToken) => {
    // Send token back to client
  })
  .catch((error) => {
    console.log('Error creating custom token:', error);
  });

जावा

String uid = "some-uid";
Map<String, Object> additionalClaims = new HashMap<String, Object>();
additionalClaims.put("premiumAccount", true);

String customToken = FirebaseAuth.getInstance()
    .createCustomToken(uid, additionalClaims);
// Send token back to client

अजगर

uid = 'some-uid'
additional_claims = {
    'premiumAccount': True
}

custom_token = auth.create_custom_token(uid, additional_claims)

जाना

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

claims := map[string]interface{}{
	"premiumAccount": true,
}

token, err := client.CustomTokenWithClaims(ctx, "some-uid", claims)
if err != nil {
	log.Fatalf("error minting custom token: %v\n", err)
}

log.Printf("Got custom token: %v\n", token)

सी#

var uid = "some-uid";
var additionalClaims = new Dictionary<string, object>()
{
    { "premiumAccount", true },
};

string customToken = await FirebaseAuth.DefaultInstance
    .CreateCustomTokenAsync(uid, additionalClaims);
// Send token back to client

आरक्षित कस्टम टोकन नाम

ग्राहकों पर कस्टम टोकन का उपयोग करके साइन इन करें

कस्टम टोकन बनाने के बाद, आपको इसे अपने क्लाइंट ऐप पर भेजना चाहिए। क्लाइंट ऐप signInWithCustomToken() को कॉल करके कस्टम टोकन से प्रमाणित करता है:

आईओएस+

उद्देश्य सी
[[FIRAuth auth] signInWithCustomToken:customToken
                           completion:^(FIRAuthDataResult * _Nullable authResult,
                                        NSError * _Nullable error) {
  // ...
}];
तीव्र
Auth.auth().signIn(withCustomToken: customToken ?? "") { user, error in
  // ...
}

एंड्रॉयड

mAuth.signInWithCustomToken(mCustomToken)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInWithCustomToken:success");
                    FirebaseUser user = mAuth.getCurrentUser();
                    updateUI(user);
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "signInWithCustomToken:failure", task.getException());
                    Toast.makeText(CustomAuthActivity.this, "Authentication failed.",
                            Toast.LENGTH_SHORT).show();
                    updateUI(null);
                }
            }
        });

एकता

auth.SignInWithCustomTokenAsync(custom_token).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("SignInWithCustomTokenAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("SignInWithCustomTokenAsync encountered an error: " + task.Exception);
    return;
  }

  Firebase.Auth.AuthResult result = task.Result;
  Debug.LogFormat("User signed in successfully: {0} ({1})",
      result.User.DisplayName, result.User.UserId);
});

सी++

firebase::Future<firebase::auth::AuthResult> result =
    auth->SignInWithCustomToken(custom_token);

वेब नेमस्पेस्ड एपीआई

firebase.auth().signInWithCustomToken(token)
  .then((userCredential) => {
    // Signed in
    var user = userCredential.user;
    // ...
  })
  .catch((error) => {
    var errorCode = error.code;
    var errorMessage = error.message;
    // ...
  });

वेब मॉड्यूलर एपीआई

import { getAuth, signInWithCustomToken } from "firebase/auth";

const auth = getAuth();
signInWithCustomToken(auth, token)
  .then((userCredential) => {
    // Signed in
    const user = userCredential.user;
    // ...
  })
  .catch((error) => {
    const errorCode = error.code;
    const errorMessage = error.message;
    // ...
  });

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

उसी तरह जैसे अन्य साइन-इन विधियों (जैसे कि signInWithEmailAndPassword() और signInWithCredential() ) के साथ आपके रीयलटाइम डेटाबेस सुरक्षा नियमों में auth ऑब्जेक्ट और आपके क्लाउड स्टोरेज सुरक्षा नियमों में request.auth ऑब्जेक्ट उपयोगकर्ता के uid के साथ पॉप्युलेट किया जाएगा। . इस मामले में, uid वही होगा जो आपने कस्टम टोकन बनाते समय निर्दिष्ट किया था।

डेटाबेस नियम

{
  "rules": {
    "adminContent": {
      ".read": "auth.uid === 'some-uid'"
    }
  }
}

भंडारण नियम

service firebase.storage {
  match /b/<your-firebase-storage-bucket>/o {
    match /adminContent/{filename} {
      allow read, write: if request.auth != null && request.auth.uid == "some-uid";
    }
  }
}

यदि कस्टम टोकन में अतिरिक्त दावे शामिल हैं, तो उन्हें आपके नियमों में auth.token (फ़ायरबेस रीयलटाइम डेटाबेस) या request.auth.token (क्लाउड स्टोरेज) ऑब्जेक्ट से संदर्भित किया जा सकता है:

डेटाबेस नियम

{
  "rules": {
    "premiumContent": {
      ".read": "auth.token.premiumAccount === true"
    }
  }
}

भंडारण नियम

service firebase.storage {
  match /b/<your-firebase-storage-bucket>/o {
    match /premiumContent/{filename} {
      allow read, write: if request.auth.token.premiumAccount == true;
    }
  }
}

तृतीय-पक्ष JWT लाइब्रेरी का उपयोग करके कस्टम टोकन बनाएं

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

कस्टम टोकन दावे
alg कलन विधि "RS256"
iss जारीकर्ता आपके प्रोजेक्ट का सेवा खाता ईमेल पता
sub विषय आपके प्रोजेक्ट का सेवा खाता ईमेल पता
aud श्रोता "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit"
iat जारी-समय पर वर्तमान समय, UNIX युग के बाद से सेकंड में
exp समय सीमा समाप्ति समय UNIX युग के बाद का समय, सेकंड में, जिस पर टोकन समाप्त होता है। यह iat से अधिकतम 3600 सेकंड देर से हो सकता है।
ध्यान दें: यह केवल उस समय को नियंत्रित करता है जब कस्टम टोकन स्वयं समाप्त हो जाता है। लेकिन एक बार जब आप किसी उपयोगकर्ता को signInWithCustomToken() का उपयोग करके साइन इन करते हैं, तो वे डिवाइस में तब तक साइन इन रहेंगे जब तक कि उनका सत्र अमान्य नहीं हो जाता या उपयोगकर्ता साइन आउट नहीं हो जाता।
uid साइन-इन किए गए उपयोगकर्ता का विशिष्ट पहचानकर्ता 1-128 वर्णों सहित एक स्ट्रिंग होना चाहिए। छोटी uid बेहतर प्रदर्शन प्रदान करती है।
claims (वैकल्पिक) सुरक्षा नियमों में शामिल करने के लिए वैकल्पिक कस्टम दावे auth / request.auth वैरिएबल

यहां विभिन्न भाषाओं में कस्टम टोकन बनाने के कुछ उदाहरण कार्यान्वयन दिए गए हैं जिनका फायरबेस एडमिन एसडीके समर्थन नहीं करता है:

पीएचपी

php-jwt उपयोग करना:

// Requires: composer require firebase/php-jwt
use Firebase\JWT\JWT;

// Get your service account's email address and private key from the JSON key file
$service_account_email = "abc-123@a-b-c-123.iam.gserviceaccount.com";
$private_key = "-----BEGIN PRIVATE KEY-----...";

function create_custom_token($uid, $is_premium_account) {
  global $service_account_email, $private_key;

  $now_seconds = time();
  $payload = array(
    "iss" => $service_account_email,
    "sub" => $service_account_email,
    "aud" => "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
    "iat" => $now_seconds,
    "exp" => $now_seconds+(60*60),  // Maximum expiration time is one hour
    "uid" => $uid,
    "claims" => array(
      "premium_account" => $is_premium_account
    )
  );
  return JWT::encode($payload, $private_key, "RS256");
}

माणिक

ruby-jwt उपयोग करना:

require "jwt"

# Get your service account's email address and private key from the JSON key file
$service_account_email = "service-account@my-project-abc123.iam.gserviceaccount.com"
$private_key = OpenSSL::PKey::RSA.new "-----BEGIN PRIVATE KEY-----\n..."

def create_custom_token(uid, is_premium_account)
  now_seconds = Time.now.to_i
  payload = {:iss => $service_account_email,
             :sub => $service_account_email,
             :aud => "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
             :iat => now_seconds,
             :exp => now_seconds+(60*60), # Maximum expiration time is one hour
             :uid => uid,
             :claims => {:premium_account => is_premium_account}}
  JWT.encode payload, $private_key, "RS256"
end

कस्टम टोकन बनाने के बाद, इसे फायरबेस के साथ प्रमाणित करने के लिए अपने क्लाइंट ऐप पर भेजें। यह कैसे करें इसके लिए ऊपर दिए गए कोड नमूने देखें।

समस्या निवारण

यह अनुभाग कुछ सामान्य समस्याओं की रूपरेखा तैयार करता है जिनका सामना डेवलपर्स को कस्टम टोकन बनाते समय करना पड़ सकता है और उन्हें कैसे हल किया जाए।

IAM API सक्षम नहीं है

यदि आप टोकन पर हस्ताक्षर करने के लिए एक सेवा खाता आईडी निर्दिष्ट कर रहे हैं तो आपको निम्न के समान एक त्रुटि मिल सकती है:

Identity and Access Management (IAM) API has not been used in project
1234567890 before or it is disabled. Enable it by visiting
https://console.developers.google.com/apis/api/iam.googleapis.com/overview?project=1234567890
then retry. If you enabled this API recently, wait a few minutes for the action
to propagate to our systems and retry.

फायरबेस एडमिन एसडीके टोकन पर हस्ताक्षर करने के लिए आईएएम एपीआई का उपयोग करता है। यह त्रुटि इंगित करती है कि IAM API वर्तमान में आपके फायरबेस प्रोजेक्ट के लिए सक्षम नहीं है। वेब ब्राउज़र में त्रुटि संदेश में लिंक खोलें, और इसे अपने प्रोजेक्ट के लिए सक्षम करने के लिए "एपीआई सक्षम करें" बटन पर क्लिक करें।

सेवा खाते के पास आवश्यक अनुमतियाँ नहीं हैं

यदि फायरबेस एडमिन एसडीके जिस सेवा खाते के रूप में चल रहा है, उसमें iam.serviceAccounts.signBlob अनुमति नहीं है, तो आपको निम्न जैसा एक त्रुटि संदेश मिल सकता है:

Permission iam.serviceAccounts.signBlob is required to perform this operation
on service account projects/-/serviceAccounts/{your-service-account-id}.

इसे हल करने का सबसे आसान तरीका प्रश्न में सेवा खाते को "सेवा खाता टोकन निर्माता" IAM भूमिका प्रदान करना है, आमतौर पर {project-name}@appspot.gserviceaccount.com :

  1. Google क्लाउड कंसोल में IAM और एडमिन पेज खोलें।
  2. अपना प्रोजेक्ट चुनें और "जारी रखें" पर क्लिक करें।
  3. आप जिस सेवा खाते को अपडेट करना चाहते हैं, उसके अनुरूप संपादन आइकन पर क्लिक करें।
  4. "एक और भूमिका जोड़ें" पर क्लिक करें।
  5. खोज फ़िल्टर में "सेवा खाता टोकन निर्माता" टाइप करें, और परिणामों से इसे चुनें।
  6. भूमिका अनुदान की पुष्टि के लिए "सहेजें" पर क्लिक करें।

इस प्रक्रिया के बारे में अधिक जानकारी के लिए IAM दस्तावेज़ देखें, या जानें कि gcloud कमांड-लाइन टूल का उपयोग करके भूमिकाएँ कैसे अपडेट करें।

सेवा खाता निर्धारित करने में विफल

यदि आपको निम्न जैसा त्रुटि संदेश मिलता है, तो फायरबेस एडमिन एसडीके को ठीक से प्रारंभ नहीं किया गया है।

Failed to determine service account ID. Initialize the SDK with service account
credentials or specify a service account ID with iam.serviceAccounts.signBlob
permission.

यदि आप सेवा खाता आईडी को स्वत: खोजने के लिए एसडीके पर भरोसा कर रहे हैं, तो सुनिश्चित करें कि कोड मेटाडेटा सर्वर के साथ प्रबंधित Google वातावरण में तैनात किया गया है। अन्यथा, एसडीके आरंभीकरण पर सेवा खाता JSON फ़ाइल या सेवा खाता आईडी निर्दिष्ट करना सुनिश्चित करें।