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

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

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

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

  2. Firebase आईडी टोकन - आपको किसी व्यक्ति के तौर पर पुष्टि किए गए अनुरोध भी भेजने पड़ सकते हैं. जैसे, क्लाइंट एसडीके पर Realtime Database नियमों के साथ ऐक्सेस सीमित करना. 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

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

Node.jsJavaPython

Node.js के लिए Google API Client library का इस्तेमाल करके:

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 के लिए Google API Client Library का इस्तेमाल करके:

// 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.

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 कंसोल के सेवा खाते सेक्शन में मिल सकते हैं.

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