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

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

इसे पाने के लिए, आपको ऐसा सर्वर एंडपॉइंट बनाना होगा जिसमें साइन इन किया जा सके क्रेडेंशियल—जैसे उपयोगकर्ता नाम और पासवर्ड—और अगर क्रेडेंशियल मान्य है, तो कस्टम JWT दिखाता है. आपके सर्वर से लौटाया गया कस्टम JWT Firebase से पुष्टि करने के लिए, क्लाइंट डिवाइस में इसका इस्तेमाल किया जा सकता है (iOS+, Android, वेब). प्रमाणित होने के बाद, यह पहचान Firebase Realtime Database जैसी अन्य Firebase सेवाओं को ऐक्सेस करने में इस्तेमाल किया जाता है और Cloud Storage. इसके अलावा, JWT का कॉन्टेंट आपकेauth Realtime Database Security Rules और आपके इसमें request.auth ऑब्जेक्ट Cloud Storage Security Rules.

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

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

कस्टम टोकन, हस्ताक्षर किए गए JWT होते हैं, जिनमें साइन करने के लिए इस्तेमाल की जाने वाली निजी कुंजी इससे जुड़ी होती है एक Google सेवा खाता होना चाहिए. Google की सेवा के बारे में बताने के कई तरीके हैं ऐसा खाता चुनें जिसका इस्तेमाल कस्टम हस्ताक्षर करने के लिए, Firebase एडमिन SDK करेगा टोकन:

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

सेवा खाते की JSON फ़ाइल का इस्तेमाल करना

सेवा खाते की JSON फ़ाइलों में, सेवा से जुड़ी सारी जानकारी मौजूद होती है खाते (इनमें आरएसए निजी कुंजी शामिल है). इन्हें यहां से डाउनलोड किया जा सकता है: Firebase कंसोल. एडमिन SDK सेट अप निर्देश पाएं, ताकि एडमिन SDK को सेवा खाते की JSON फ़ाइल से शुरू करें.

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

एडमिन SDK को सेवा खाता खोजने देना

अगर आपका कोड किसी ऐसी जगह पर डिप्लॉय किया जाता है जिसे Google मैनेज करता है, तो 'एडमिन SDK' कस्टम टोकन पर हस्ताक्षर करने का तरीका अपने-आप खोजने की कोशिश कर सकता है:

  • अगर आपका कोड इसके लिए App Engine स्टैंडर्ड एनवायरमेंट में डिप्लॉय किया जाता है Java, Python या Go, तो एडमिन SDK टूल ऐप्लिकेशन पहचान सेवा उस एनवायरमेंट में मौजूद होना चाहिए, ताकि कस्टम टोकन पर हस्ताक्षर किया जा सके. ऐप्लिकेशन पहचान सेवा Google ऐप्लिकेशन के ज़रिए आपके ऐप्लिकेशन के लिए प्रावधान किए गए सेवा खाते का इस्तेमाल करके डेटा को साइन करता है इंजन.

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

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

Node.js

initializeApp();

Java

FirebaseApp.initializeApp();

Python

default_app = firebase_admin.initialize_app()

शुरू करें

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

C#

FirebaseApp.Create();

इस कोड को स्थानीय तौर पर टेस्ट करने के लिए, सेवा खाते की JSON फ़ाइल डाउनलोड करें और इस पर ले जाने के लिए, GOOGLE_APPLICATION_CREDENTIALS एनवायरमेंट वैरिएबल.

अगर Firebase एडमिन SDK को सेवा खाते के आईडी की कोई स्ट्रिंग खोजनी है, तो इसलिए, जब आपका कोड पहली बार कस्टम टोकन बनाता है. नतीजे को कैश मेमोरी में सेव किया जाता है और टोकन पर हस्ताक्षर करने की बाद की कार्रवाइयों के लिए, इसका फिर से इस्तेमाल किया जाता है. अपने-आप खोजा जाने वाला सेवा खाता आईडी, आम तौर पर डिफ़ॉल्ट सेवा में से एक होता है Google Cloud की ओर से उपलब्ध कराए गए खाते:

साफ़ तौर पर बताए गए सेवा खाता आईडी की तरह ही, अपने-आप खोजी जाने वाली सेवा खाता आईडी के पासiam.serviceAccounts.signBlob काम करने के लिए कस्टम टोकन बनाना. आपको डाइग्नोस्टिक टूल की मदद से आईएएम और एडमिन सेक्शन का इस्तेमाल करें.Google Cloud ज़रूरी अनुमतियां दी हैं. ज़्यादा जानकारी के लिए, समस्या हल करने वाला सेक्शन देखें.

सेवा खाता आईडी का इस्तेमाल करना

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

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

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

Node.js

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

Java

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

Python

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

C#

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

सेवा खाता आईडी संवेदनशील जानकारी नहीं होते हैं. इसलिए, उनका एक्सपोज़र एक समान नहीं है. हालांकि, बताई गई सेवा के साथ कस्टम टोकन पर साइन करने के लिए खाते के लिए, Firebase एडमिन SDK को रिमोट सेवा शुरू करनी होगी. इसके अलावा, आपको यह भी पक्का करना होगा कि एडमिन SDK टूल का सेवा खाता यह कॉल करने के लिए इस्तेमाल किया जा रहा है —आम तौर पर {project-name}@appspot.gserviceaccount.comiam.serviceAccounts.signBlob में शामिल है अनुमति है. ज़्यादा जानकारी के लिए, समस्या हल करने वाला सेक्शन देखें.

Firebase एडमिन SDK टूल का इस्तेमाल करके कस्टम टोकन बनाएं

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

Node.js

const uid = 'some-uid';

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

Java

String uid = "some-uid";

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

Python

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)

C#

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

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

Java

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

Python

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)

C#

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():

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

Objective-C
[[FIRAuth auth] signInWithCustomToken:customToken
                           completion:^(FIRAuthDataResult * _Nullable authResult,
                                        NSError * _Nullable error) {
  // ...
}];
Swift
Auth.auth().signIn(withCustomToken: customToken ?? "") { user, error in
  // ...
}

Android

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

Unity

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

C++

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

Web

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

Web

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 ऑब्जेक्ट अपने Realtime Database Security Rules में और request.auth ऑब्जेक्ट में Cloud Storage Security Rules का मान उपयोगकर्ता की 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 लाइब्रेरी का इस्तेमाल करके कस्टम टोकन बनाएं

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

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

यहां कुछ उदाहरण दिए गए हैं जिनमें बताया गया है कि कस्टम टोकन कैसे बनाए जाते हैं ऐसी भाषाएं जो Firebase एडमिन SDK टूल पर काम नहीं करतीं:

PHP

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

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

कस्टम टोकन बनाने के बाद, उसे अपने क्लाइंट ऐप्लिकेशन में भेजें, ताकि आप उसका इस्तेमाल कर सकें Firebase की मदद से पुष्टि करें. इसे करने का तरीका जानने के लिए, ऊपर दिए गए कोड सैंपल देखें.

समस्या का हल

इस सेक्शन में कुछ आम समस्याओं के बारे में बताया गया है. इन समस्याओं का सामना तब करना पड़ता है, जब डेवलपर और उन्हें हल करने का तरीका भी बताया गया है.

IAM एपीआई चालू नहीं है

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

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 एडमिन SDK आईएएम एपीआई टोकन साइन करने के लिए. इस गड़बड़ी से पता चलता है कि IAM एपीआई फ़िलहाल चालू नहीं है आपके लिए Firebase प्रोजेक्ट. गड़बड़ी के मैसेज में दिए गए लिंक को वेब ब्राउज़र में खोलें और "एपीआई चालू करें" पर क्लिक करें बटन पर क्लिक करें.

सेवा खाते के पास ज़रूरी अनुमतियां नहीं हैं

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

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

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

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

IAM दस्तावेज़ देखें या इस प्रक्रिया के बारे में ज़्यादा जानकारी पाएं. इसके लिए, gcloud कमांड-लाइन टूल.

सेवा खाते का पता नहीं लगाया जा सका

अगर आपको नीचे दिए गए मैसेज से मिलता-जुलता कोई गड़बड़ी का मैसेज मिलता है, तो Firebase एडमिन 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.

अगर सेवा खाता आईडी अपने-आप खोजने के लिए, SDK टूल का इस्तेमाल किया जा रहा है, तो पक्का करें कि कोड को, मैनेज किए जा रहे Google के प्लैटफ़ॉर्म पर, मेटाडेटा सर्वर के साथ डिप्लॉय किया जाता है. अगर ऐसा नहीं है, तो सेवा खाते की JSON फ़ाइल या सेवा खाता आईडी ज़रूर बताएं SDK टूल शुरू करने के लिए.