REST के अनुरोधों की पुष्टि करें

Firebase SDK टूल, आपकी ओर से पुष्टि करने और Firebase Realtime Database के साथ सभी तरह के कम्यूनिकेशन को मैनेज करते हैं. हालांकि, अगर आप ऐसे एनवायरमेंट में हैं जहां क्लाइंट SDK टूल मौजूद नहीं है या आपको डेटा को पढ़ने और लिखने के लिए, लगातार डेटाबेस से कनेक्ट रहने की ज़रूरत नहीं है, तो डेटा को पढ़ने और लिखने के लिए Realtime Database REST API का इस्तेमाल किया जा सकता है.

इनमें से किसी एक तरीके से उपयोगकर्ताओं की पुष्टि करें:

  1. Google OAuth2 ऐक्सेस टोकन - आम तौर पर, Realtime Database में डेटा पढ़ने और उसमें डेटा लिखने की सुविधा, Realtime Database के नियमों के हिसाब से तय होती है. हालांकि, किसी सर्वर से अपना डेटा ऐक्सेस किया जा सकता है. साथ ही, किसी सेवा खाते से जनरेट किए गए Google OAuth2 ऐक्सेस टोकन की मदद से, उस सर्वर को अपने डेटा को पढ़ने और उसमें बदलाव करने का पूरा ऐक्सेस दिया जा सकता है.

  2. Firebase आईडी टोकन - हो सकता है कि आप किसी व्यक्ति के तौर पर पुष्टि किए गए अनुरोध भी भेजना चाहें. जैसे, Realtime Database क्लाइंट SDK टूल पर नियमों के साथ ऐक्सेस को सीमित करना. REST API, क्लाइंट SDK टूल के इस्तेमाल किए गए Firebase आईडी टोकन को स्वीकार करता है.

Google OAuth2 ऐक्सेस टोकन

आपके Realtime Databaseनियमों के मुताबिक, सार्वजनिक तौर पर पढ़ा या लिखा जा सकने वाला डेटा, बिना किसी पुष्टि के REST API के ज़रिए भी पढ़ा और लिखा जा सकता है. हालांकि, अगर आपको अपने सर्वर को Realtime Database नियमों को बायपास करना है, तो आपको पढ़ने और लिखने के अनुरोधों की पुष्टि करनी होगी. Google OAuth2 की मदद से पुष्टि करने के लिए, यह तरीका अपनाएं:

  1. ऐक्सेस टोकन जनरेट करें.
  2. उस ऐक्सेस टोकन से पुष्टि करें.

ऐक्सेस टोकन जनरेट करना

Realtime Database REST API, Google OAuth2 ऐक्सेस टोकन के स्टैंडर्ड तौर पर इस्तेमाल किए जाने वाले वर्शन को स्वीकार करता है. ऐक्सेस टोकन, ऐसे सेवा खाते का इस्तेमाल करके जनरेट किए जा सकते हैं जिसके पास आपके Realtime Database के लिए सही अनुमतियां हों. अगर आपके पास पहले से कोई सेवा खाता कुंजी फ़ाइल नहीं है, तो Firebase कंसोल के सेवा खाते सेक्शन में सबसे नीचे मौजूद, नई निजी कुंजी जनरेट करें बटन पर क्लिक करके, सेवा खाते की नई कुंजी फ़ाइल आसानी से जनरेट की जा सकती है.

सेवा खाते की पासकोड फ़ाइल मिलने के बाद, Google API क्लाइंट लाइब्रेरी में से किसी एक का इस्तेमाल करके, Google OAuth2 ऐक्सेस टोकन जनरेट किया जा सकता है. इसके लिए, इन ज़रूरी स्कोप का इस्तेमाल करें:

  • https://www.googleapis.com/auth/userinfo.email
  • https://www.googleapis.com/auth/firebase.database

यहां कुछ उदाहरण दिए गए हैं. इनसे पता चलता है कि Google OAuth2 ऐक्सेस टोकन बनाने का तरीका क्या है, ताकि अलग-अलग भाषाओं में Realtime Database REST API की पुष्टि की जा सके:

Node.js

Node.js के लिए Google API क्लाइंट लाइब्रेरी का इस्तेमाल करके:

var {google} = require("googleapis");

// Load the service account key JSON file.
var serviceAccount = require("path/to/serviceAccountKey.json");

// Define the required scopes.
var scopes = [
  "https://www.googleapis.com/auth/userinfo.email",
  "https://www.googleapis.com/auth/firebase.database"
];

// Authenticate a JWT client with the service account.
var jwtClient = new google.auth.JWT(
  serviceAccount.client_email,
  null,
  serviceAccount.private_key,
  scopes
);

// Use the JWT client to generate an access token.
jwtClient.authorize(function(error, tokens) {
  if (error) {
    console.log("Error making request to generate access token:", error);
  } else if (tokens.access_token === null) {
    console.log("Provided service account does not have permission to generate access tokens");
  } else {
    var accessToken = tokens.access_token;

    // See the "Using the access token" section below for information
    // on how to use the access token to send authenticated requests to
    // the Realtime Database REST API.
  }
});

Java

Java के लिए Google API क्लाइंट लाइब्रेरी का इस्तेमाल करके:

// Load the service account key JSON file
FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");

// Authenticate a Google credential with the service account
GoogleCredential googleCred = GoogleCredential.fromStream(serviceAccount);

// Add the required scopes to the Google credential
GoogleCredential scoped = googleCred.createScoped(
    Arrays.asList(
      "https://www.googleapis.com/auth/firebase.database",
      "https://www.googleapis.com/auth/userinfo.email"
    )
);

// Use the Google credential to generate an access token
scoped.refreshToken();
String token = scoped.getAccessToken();

// See the "Using the access token" section below for information
// on how to use the access token to send authenticated requests to the
// Realtime Database REST API.

Python

google-auth लाइब्रेरी का इस्तेमाल करके:

from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession

# Define the required scopes
scopes = [
  "https://www.googleapis.com/auth/userinfo.email",
  "https://www.googleapis.com/auth/firebase.database"
]

# Authenticate a credential with the service account
credentials = service_account.Credentials.from_service_account_file(
    "path/to/serviceAccountKey.json", scopes=scopes)

# Use the credentials object to authenticate a Requests session.
authed_session = AuthorizedSession(credentials)
response = authed_session.get(
    "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json")

# Or, use the token directly, as described in the "Authenticate with an
# access token" section below. (not recommended)
request = google.auth.transport.requests.Request()
credentials.refresh(request)
access_token = credentials.token

ऐक्सेस टोकन की मदद से पुष्टि करना

Realtime Database REST API को पुष्टि किए गए अनुरोध भेजने के लिए, ऊपर जनरेट किए गए Google OAuth2 ऐक्सेस टोकन को Authorization: Bearer <ACCESS_TOKEN> हेडर या access_token=<ACCESS_TOKEN> क्वेरी स्ट्रिंग पैरामीटर के तौर पर पास करें. यहां curl आदा का नाम पढ़ने का अनुरोध करने का उदाहरण दिया गया है:

curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?access_token=<ACCESS_TOKEN>"

<DATABASE_NAME> की जगह अपने Realtime Database का नाम और <ACCESS_TOKEN> की जगह Google OAuth2 ऐक्सेस टोकन डालना न भूलें.

अनुरोध पूरा होने पर, 200 OK एचटीटीपी स्टेटस कोड दिखेगा. रिस्पॉन्स में, वापस पाया गया डेटा शामिल होता है:

{"first":"Ada","last":"Lovelace"}

Firebase आईडी टोकन

जब कोई उपयोगकर्ता या डिवाइस Firebase Authentication का इस्तेमाल करके साइन इन करता है, तो Firebase उससे जुड़ा एक आईडी टोकन बनाता है. इससे उपयोगकर्ता या डिवाइस की पहचान होती है और उसे Realtime Database और Cloud Storage जैसे कई संसाधनों का ऐक्सेस मिलता है. Realtime Database REST API की पुष्टि करने और उस उपयोगकर्ता की ओर से अनुरोध करने के लिए, उस आईडी टोकन का फिर से इस्तेमाल किया जा सकता है.

आईडी टोकन जनरेट करना

क्लाइंट से Firebase आईडी टोकन पाने के लिए, क्लाइंट पर आईडी टोकन पाना में दिया गया तरीका अपनाएं.

ध्यान दें कि आईडी टोकन कुछ समय बाद खत्म हो जाते हैं. इसलिए, उन्हें वापस पाने के बाद, जल्द से जल्द इस्तेमाल करना चाहिए.

आईडी टोकन की मदद से पुष्टि करना

Realtime Database REST API को पुष्टि किए गए अनुरोध भेजने के लिए, ऊपर जनरेट किए गए आईडी टोकन को auth=<ID_TOKEN> क्वेरी स्ट्रिंग पैरामीटर के तौर पर पास करें. यहां curlआदा का नाम पढ़ने के अनुरोध का उदाहरण दिया गया है:

curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?auth=<ID_TOKEN>"

<DATABASE_NAME> की जगह अपने Realtime Database का नाम और <ID_TOKEN> की जगह Firebase आईडी टोकन डालना न भूलें.

अनुरोध पूरा होने पर, 200 OK एचटीटीपी स्टेटस कोड दिखेगा. रिस्पॉन्स में, वापस पाया गया डेटा शामिल होता है:

{"first":"Ada","last":"Lovelace"}

लेगसी टोकन

अगर अब भी लेगसी Firebase पुष्टि करने वाले टोकन का इस्तेमाल किया जा रहा है, तो हमारा सुझाव है कि आप अपने REST पुष्टि करने के तरीके को, ऊपर बताए गए पुष्टि करने के किसी एक तरीके पर अपडेट करें.

Realtime Database REST API, अब भी सीक्रेट के साथ-साथ, लेगसी पुष्टि करने वाले टोकन के ज़रिए पुष्टि करने की सुविधा देता है. Realtime Database के पासवर्ड, Firebase कंसोल के सेवा खाते सेक्शन में देखे जा सकते हैं.

सीक्रेट, लंबे समय तक काम करने वाले क्रेडेंशियल होते हैं. हमारा सुझाव है कि किसी प्रोजेक्ट से, सीक्रेट ऐक्सेस वाले उपयोगकर्ताओं (जैसे, मालिक) को हटाते समय, नया सीक्रेट जनरेट करें और मौजूदा सीक्रेट को रद्द करें.