Google is committed to advancing racial equity for Black communities. See how.
इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Node.js

admin.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 सेवा खाता आईडी के पास कस्टम टोकन से काम करने के लिए iam.serviceAccounts.signBlob अनुमति होनी चाहिए। डिफ़ॉल्ट सेवा खातों को आवश्यक अनुमति देने के लिए आपको Google क्लाउड कंसोल के IAM और व्यवस्थापक अनुभाग का उपयोग करना पड़ सकता है। अधिक विवरण के लिए नीचे समस्या निवारण अनुभाग देखें।

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

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

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

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

Node.js

admin.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 -कॉल को बनाने के लिए एडमिन एसडीके जिस सर्विस अकाउंट का इस्तेमाल कर रहा है, वह है- आमतौर पर {project-name}@appspot.gserviceaccount.com - {project-name}@appspot.gserviceaccount.com - iam.serviceAccounts.signBlob अनुमति है । अधिक विवरण के लिए नीचे समस्या निवारण अनुभाग देखें।

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

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

Node.js

const uid = 'some-uid';

admin
  .auth()
  .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 ऑब्जेक्ट्स में उपलब्ध होगा:

Node.js

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

admin
  .auth()
  .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() करके कस्टम टोकन के साथ प्रमाणित करता है। 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.FirebaseUser newUser = task.Result;
  Debug.LogFormat("User signed in successfully: {0} ({1})",
      newUser.DisplayName, newUser.UserId);
});

सी ++

firebase::Future<firebase::auth::User*> 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;
    // ...
  });

यदि प्रमाणीकरण सफल होता है, तो आपके उपयोगकर्ता को अब आपके ग्राहक ऐप में कस्टम टोकन में शामिल 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 (Firebase Realtime Database) या request.auth.token (Cloud Storage) ऑब्जेक्ट से संदर्भित किया जा सकता है।

डेटाबेस नियम

{
  "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-36 वर्णों के बीच हस्ताक्षरित उपयोगकर्ता का विशिष्ट पहचानकर्ता एक स्ट्रिंग होना चाहिए
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.

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

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

अगर फायरबेस एडमिन SDK के सेवा खाते में 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 कमांड-लाइन टूल का उपयोग करके अद्यतन भूमिकाएँ करना सीखें।

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

यदि आपको निम्न के समान त्रुटि संदेश मिलता है, तो Firebase Admin SDK को ठीक से प्रारंभ नहीं किया गया है।

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 फ़ाइल या सेवा खाता आईडी निर्दिष्ट करना सुनिश्चित करें।