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.com
—
iam.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
:
- आईएएम और एडमिन खोलें पेज Google Cloud कंसोल में.
- अपना प्रोजेक्ट चुनें और "जारी रखें" पर क्लिक करें.
- आपको जिस सेवा खाते को अपडेट करना है उसके आगे दिए गए 'बदलाव करें' आइकॉन पर क्लिक करें.
- "एक और भूमिका जोड़ें" पर क्लिक करें.
- "सेवा खाता टोकन क्रिएटर" टाइप करें खोज फ़िल्टर में जाएं और को नहीं खोज पाते.
- "सेव करें" पर क्लिक करें भूमिका के लिए दी गई अनुमति की पुष्टि करने के लिए.
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 टूल शुरू करने के लिए.