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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Node.js

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 क्लाउड द्वारा प्रदान किए गए डिफ़ॉल्ट सेवा खातों में से एक है:

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

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

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

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

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

Node.js

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

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

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

जावा

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

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.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 रीयलटाइम डाटाबेस) या 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 को ढालने के लिए करें जिसमें निम्नलिखित दावे शामिल हैं:

कस्टम टोकन दावे
alg कलन विधि "RS256"
iss जारीकर्ता आपके प्रोजेक्ट का सेवा खाता ईमेल पता
sub विषय आपके प्रोजेक्ट का सेवा खाता ईमेल पता
aud दर्शक "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit"
iat जारी-समय पर UNIX युग के बाद से वर्तमान समय, सेकंडों में
exp समय सीमा समाप्ति समय समय, सेकंड में UNIX युग के बाद से, जिस पर टोकन समाप्त हो जाता है। यह 3600 सेकंड की एक अधिकतम बाद में की तुलना में किया जा सकता है iat
नोटः यह केवल समय को नियंत्रित करता है जब खुद को टोकन कस्टम समाप्त हो रहा है। लेकिन अगर आप एक बार का उपयोग करने में एक उपयोगकर्ता हस्ताक्षर 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

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

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

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

आईएएम एपीआई सक्षम नहीं है

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

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 एपीआई संकेत टोकन के लिए। यह त्रुटि इंगित करती है कि IAM API वर्तमान में आपके 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}.

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

  1. खोलें IAM और व्यवस्थापक Google क्लाउड कंसोल में पेज।
  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.

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