2016-05-25 5 views
7

मैं नए डेटाबेस और 3.0 क्लाइंट libs में माइग्रेट कर रहा हूं। मैं उस भाग को अपडेट कर रहा हूं जो फायरबेस डीबी में संसाधन अपडेट करने के लिए PATCH करने के लिए कस्टम ऑथ टोकन (हमारे सर्वर पर) उत्पन्न करता है।व्यवस्थापक के रूप में एफबी डीबी को आरईएसटी अनुरोध करने के लिए कस्टम टोकन का उपयोग

ये PATCH इस आधार पर admin दावे करने वाली firebase के लिए बनाया जा करने के लिए इस्तेमाल हमारे सर्वर से अनुरोध: https://www.firebase.com/docs/rest/guide/user-auth.htm

नई डीबी के लिए, मैं जेडब्ल्यूटी टोकन (ruby-jwt का प्रयोग करके) इस तरह पैदा कर रहा हूँ:

payload = { 
    aud: "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit", 
    claims: custom_claims.merge({ admin: true }), 
    exp: now_seconds + (60 * 60), # Maximum expiration time is one hour 
    iat: now_seconds, 
    iss: service_account_email, 
    sub: service_account_email, 
    uid: uid 
} 

JWT.encode(payload, private_key, "RS256") 

PATCH फ़ायरबेस डीबी के लिए इस टोकन के साथ अनुरोध विफल रहता है: Missing claim 'kid' in auth header

+0

पार पोस्ट: https://groups.google.com/forum/#!topic/firebase-talk/XTJfiltow-I –

उत्तर

1

यहाँ माणिक googleauth मॉड्यूल का उपयोग कर माइकल Bleigh के जवाब के बराबर है। auth_client.sub के लिए मान इस JSON फ़ाइल में client_email से आता है।

बेशक, ऊपर के रूप में, यह केवल आपके द्वारा नियंत्रित सर्वर एप्लिकेशन में मान्य है।

इसके अलावा, फायरबेस रीस्ट एपीआई को अनुरोध करना अभी भी पाठक के लिए एक अभ्यास है।

संदर्भ

14

नए फायरबेस में आपको व्यवस्थापकीय पहुंच प्रमाण-पत्र बनाने के लिए सीधे एक सेवा खाते का उपयोग करने की आवश्यकता है। यहाँ एक Node.js टुकड़ा पता चलता है कि कैसे डेटाबेस से REST कॉल बनाने के लिए है:

// key.json is a service account key downloaded from the Firebase Console 
var key = require('./key.json'); 

var google = require('googleapis'); 
var request = require('request'); 

var DATABASE_URL = 'https://<databaseName>.firebaseio.com'; 

var jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, [ 
    'https://www.googleapis.com/auth/userinfo.email', 
    'https://www.googleapis.com/auth/firebase.database' 
]); 

jwtClient.authorize(function(err, tokens) { 
    request({ 
    url: DATABASE_URL + '/.json', 
    method: 'GET', 
    headers: { 
     'Authorization': 'Bearer ' + tokens.access_token 
    } 
    }, function(err, resp) { 
    console.log(resp.body); 
    }); 
}); 

रूबी में भी ऐसा ही करने के लिए, आपको पहुँच टोकन प्राप्त करने में कठिनाई सेवा खाता क्रेडेंशियल का उपयोग के लिए googleauth gem पर एक नज़र ले सकता है ।

require 'googleauth' 

scopes = [ 'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/firebase.database'] 
auth = ::Google::Auth.get_application_default(scopes) 
auth_client = auth.dup 
auth_client.sub = "[email protected]" 
token = auth_client.fetch_access_token! 

आप भी अपनी सेवा खाते JSON फ़ाइल के रास्ते पर GOOGLE_APPLICATION_CREDENTIALS वातावरण चर सेट करने के लिए की आवश्यकता होगी:

+0

है फायरबेस 2.x कस्टम आरईएसटी टोकन के साथ, मेरे डेटाबेस नियमों से सुलभ कस्टम दावों को शामिल करना संभव है? – user1881056

+0

आप 'auth_variable_override' क्वेरी पैरामीटर के साथ कस्टम दावे जोड़ सकते हैं (बस इसे एक वैध JSON ऑब्जेक्ट बनाएं)। –

+0

क्या आप आरईएसटी अनुरोध में स्वयं क्वेरी पैरामीटर के रूप में हैं? यह कैसे सुरक्षित है? मेरा ग्राहक अविश्वसनीय है (एक आईओटी डिवाइस) और मुझे फायरबेस डीबी तक पहुंच सीमित करने के लिए एक सुरक्षित तरीका चाहिए। असल में, यह (स्पष्ट रूप से अनियंत्रित) सुविधा मेरे पूरे सुरक्षा मॉडल में पूरी तरह से उड़ाती है। मुझे उम्मीद है कि मैंने आपको गलत समझा है! – user1881056

संबंधित मुद्दे

 संबंधित मुद्दे