बाकी अनुरोधों को प्रमाणित करें

फायरबेस एसडीके आपकी ओर से फायरबेस रीयलटाइम डेटाबेस के साथ सभी प्रमाणीकरण और संचार को संभालते हैं। हालाँकि, जब आप ऐसे वातावरण में होते हैं जिसमें क्लाइंट SDK नहीं होता है या आप लगातार डेटाबेस कनेक्शन के ओवरहेड से बचना चाहते हैं, तो आप डेटा को पढ़ने और लिखने के लिए रीयलटाइम डेटाबेस REST API का उपयोग कर सकते हैं।

निम्नलिखित विधियों में से किसी एक के माध्यम से उपयोगकर्ताओं को प्रमाणित करें:

  1. Google OAuth2 एक्सेस टोकन - आमतौर पर, रीयलटाइम डेटाबेस से पढ़ने और लिखने की क्षमता रीयलटाइम डेटाबेस नियमों द्वारा नियंत्रित होती है। लेकिन, आप अपने डेटा को एक सर्वर से एक्सेस कर सकते हैं और उस सर्वर को एक सेवा खाते से उत्पन्न Google OAuth2 एक्सेस टोकन के साथ अपने डेटा को पूर्ण पढ़ने और लिखने की पहुंच प्रदान कर सकते हैं।

  2. फायरबेस आईडी टोकन - आप व्यक्तिगत उपयोगकर्ता के रूप में प्रमाणित अनुरोध भी भेजना चाह सकते हैं, जैसे क्लाइंट एसडीके पर रीयलटाइम डेटाबेस नियमों के साथ पहुंच सीमित करना। REST API क्लाइंट SDKs द्वारा उपयोग किए गए समान Firebase ID टोकन को स्वीकार करता है।

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

कोई भी डेटा जो आपके रीयलटाइम डेटाबेस नियमों के अनुसार सार्वजनिक रूप से पढ़ने योग्य या लिखने योग्य है, बिना किसी प्रमाणीकरण के REST API के माध्यम से भी पढ़ने योग्य और लिखने योग्य है। हालाँकि, यदि आप चाहते हैं कि आपका सर्वर आपके रीयलटाइम डेटाबेस नियमों को बायपास कर दे, तो आपको अपने पढ़ने और लिखने के अनुरोधों को प्रमाणित करना होगा। Google OAuth2 के माध्यम से प्रमाणीकरण के लिए निम्नलिखित चरणों की आवश्यकता होती है:

  1. एक एक्सेस टोकन जनरेट करें.
  2. उस एक्सेस टोकन से प्रमाणित करें।

एक एक्सेस टोकन जनरेट करें

रीयलटाइम डेटाबेस REST API मानक Google OAuth2 एक्सेस टोकन स्वीकार करता है। आपके रीयलटाइम डेटाबेस के लिए उचित अनुमतियों वाले सेवा खाते का उपयोग करके एक्सेस टोकन उत्पन्न किए जा सकते हैं। फायरबेस कंसोल के सेवा खाता अनुभाग के निचले भाग में नई निजी कुंजी उत्पन्न करें बटन पर क्लिक करने से आप आसानी से एक नई सेवा खाता कुंजी फ़ाइल उत्पन्न कर सकते हैं यदि आपके पास पहले से कोई नहीं है।

एक बार आपके पास सेवा खाता कुंजी फ़ाइल हो जाने पर, आप निम्नलिखित आवश्यक स्कोप के साथ Google OAuth2 एक्सेस टोकन उत्पन्न करने के लिए Google API क्लाइंट लाइब्रेरी में से किसी एक का उपयोग कर सकते हैं:

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

यहां कुछ उदाहरण कार्यान्वयन दिए गए हैं जो दिखाते हैं कि विभिन्न भाषाओं में रीयलटाइम डेटाबेस REST API को प्रमाणित करने के लिए Google OAuth2 एक्सेस टोकन कैसे बनाएं:

नोड.जे.एस

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

जावा

जावा के लिए 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.

अजगर

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

एक्सेस टोकन से प्रमाणित करें

रीयलटाइम डेटाबेस 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> अपने रीयलटाइम डेटाबेस के नाम से और <ACCESS_TOKEN> को Google OAuth2 एक्सेस टोकन से बदलना सुनिश्चित करें।

एक सफल अनुरोध को 200 OK HTTP स्टेटस कोड द्वारा दर्शाया जाएगा। प्रतिक्रिया में पुनर्प्राप्त किया जा रहा डेटा शामिल है:

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

फायरबेस आईडी टोकन

जब कोई उपयोगकर्ता या डिवाइस फायरबेस प्रमाणीकरण का उपयोग करके साइन इन करता है, तो फायरबेस एक संबंधित आईडी टोकन बनाता है जो विशिष्ट रूप से उनकी पहचान करता है और उन्हें रीयलटाइम डेटाबेस और क्लाउड स्टोरेज जैसे कई संसाधनों तक पहुंच प्रदान करता है। आप रीयलटाइम डेटाबेस REST API को प्रमाणित करने और उस उपयोगकर्ता की ओर से अनुरोध करने के लिए उस आईडी टोकन का पुन: उपयोग कर सकते हैं।

एक आईडी टोकन जनरेट करें

क्लाइंट से फायरबेस आईडी टोकन पुनर्प्राप्त करने के लिए, क्लाइंट पर आईडी टोकन पुनर्प्राप्त करें में दिए गए चरणों का पालन करें।

ध्यान दें कि आईडी टोकन थोड़े समय के बाद समाप्त हो जाते हैं, और उन्हें पुनः प्राप्त करने के बाद जितनी जल्दी हो सके उपयोग किया जाना चाहिए।

आईडी टोकन से प्रमाणित करें

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

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

अपने रीयलटाइम डेटाबेस के नाम के साथ <DATABASE_NAME> और <ID_TOKEN> को फायरबेस आईडी टोकन से बदलना सुनिश्चित करें।

एक सफल अनुरोध को 200 OK HTTP स्टेटस कोड द्वारा दर्शाया जाएगा। प्रतिक्रिया में पुनर्प्राप्त किया जा रहा डेटा शामिल है:

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

विरासती टोकन

यदि आप अभी भी लीगेसी फायरबेस प्रमाणीकरण टोकन का उपयोग कर रहे हैं, तो हम अनुशंसा करते हैं कि आप अपने REST प्रमाणीकरण को ऊपर वर्णित प्रमाणीकरण विधियों में से एक में अपडेट करें।

रीयलटाइम डेटाबेस REST API अभी भी रहस्यों सहित विरासत प्रमाणीकरण टोकन के माध्यम से प्रमाणीकरण का समर्थन करता है। आपके रीयलटाइम डेटाबेस रहस्य फायरबेस कंसोल के सेवा खाता अनुभाग में पाए जा सकते हैं।

रहस्य लंबे समय तक जीवित रहने वाले प्रमाण हैं। हम किसी प्रोजेक्ट से गुप्त पहुंच वाले उपयोगकर्ताओं (जैसे मालिकों) को हटाते समय एक नया रहस्य उत्पन्न करने और मौजूदा रहस्य को रद्द करने की सलाह देते हैं।