مصادقة طلبات REST

تتولّى حِزم تطوير البرامج (SDK) من Firebase جميع عمليات المصادقة والتواصل مع Firebase Realtime Database نيابةً عنك. ومع ذلك، عندما تكون في بيئة لا تتضمّن حزمة تطوير برامج (SDK) للعميل أو تريد تجنُّب الحمل الزائد الناتج عن اتصال دائم بقاعدة البيانات، يمكنك الاستفادة من واجهة برمجة التطبيقات Realtime Database REST لقراءة البيانات وكتابتها.

يمكنك مصادقة المستخدمين من خلال إحدى الطرق التالية:

  1. رموز الدخول إلى Google OAuth2: عادةً، يتم تحديد إمكانية القراءة من Realtime Database والكتابة إليه من خلال قواعد Realtime Database. ومع ذلك، يمكنك الوصول إلى بياناتك من خادم ومنح هذا الخادم إذن الوصول الكامل للقراءة والكتابة إلى بياناتك باستخدام رمز مميز للوصول إلى Google OAuth2 تم إنشاؤه من حساب خدمة.

  2. رموز تعريف Firebase: قد تحتاج أيضًا إلى إرسال طلبات مصادَق عليها بصفتك مستخدمًا فرديًا، مثل الحدّ من الوصول باستخدام Realtime Database القواعد في حِزم تطوير البرامج (SDK) الخاصة بالعميل. تقبل واجهة REST API رموز التعريف نفسها التي تستخدمها حِزم تطوير البرامج (SDK) الخاصة بالعميل.

رموز الدخول عبر Google OAuth2

يمكن أيضًا قراءة أي بيانات أو كتابتها بشكل علني وفقًا Realtime Database لقواعدك من خلال واجهة REST API بدون أي مصادقة. ومع ذلك، إذا كنت تريد أن يتجاوز الخادم Realtime Database القواعد، عليك مصادقة طلبات القراءة والكتابة. تتطلّب المصادقة من خلال Google OAuth2 الخطوات التالية:

  1. أنشئ رمز دخول.
  2. صادِق على الطلب باستخدام رمز الدخول هذا.

إنشاء رمز دخول

تقبل واجهة Realtime Database REST API رموز الدخول القياسية في Google OAuth2. يمكن إنشاء رموز الدخول المميزة باستخدام حساب خدمة لديه الأذونات المناسبة إلى Realtime Database. يسمح لك النقر على الزر إنشاء مفتاح خاص جديد في أسفل قسم حسابات الخدمة في وحدة تحكّم Firebase بإنشاء ملف مفتاح حساب خدمة جديد بسهولة إذا لم يكن لديك ملف حالي.

بعد الحصول على ملف مفتاح حساب الخدمة، يمكنك استخدام إحدى مكتبات عميل واجهة برمجة تطبيقات Google لإنشاء رمز وصول Google OAuth2 المميز مع النطاقات المطلوبة التالية:

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

في ما يلي بعض الأمثلة على عمليات التنفيذ التي توضّح كيفية إنشاء رموز مميزة للدخول إلى Google OAuth2 للمصادقة على واجهة برمجة تطبيقات REST الخاصة بـ Realtime Database بمجموعة متنوعة من اللغات:

Node.js

باستخدام Google API Client Library لنظام Node.js:

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 للغة Java:

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

المصادقة باستخدام رمز دخول

لإرسال طلبات مصادَق عليها إلى واجهة برمجة تطبيقات REST الخاصة بـ Realtime Database، مرِّر رمز الدخول إلى 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.

سيتم الإشارة إلى الطلب الناجح باستخدام رمز حالة HTTP 200 OK. يتضمّن الرد البيانات التي يتم استرجاعها:

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

رموز التعريف المميزة في Firebase

عندما يسجّل مستخدم أو جهاز الدخول باستخدام Firebase Authentication، ينشئ Firebase رمزًا مميزًا للمعرّف مطابقًا يحدّد هويته بشكل فريد ويمنحه إذن الوصول إلى العديد من الموارد، مثل Realtime Database وCloud Storage. يمكنك إعادة استخدام رمز التعريف هذا لمصادقة واجهة برمجة التطبيقات Realtime Database REST API وإرسال طلبات نيابةً عن هذا المستخدم.

إنشاء رمز مميّز للمعرّف

لاسترداد الرمز المميّز لمعرّف Firebase من العميل، اتّبِع الخطوات الواردة في استرداد الرموز المميّزة لمعرّف Firebase على الأجهزة.

يُرجى العِلم أنّ رموز التعريف تنتهي صلاحيتها بعد فترة قصيرة من الوقت، ويجب استخدامها في أسرع وقت ممكن بعد استردادها.

المصادقة باستخدام رمز مميّز لتعريف الهوية

لإرسال طلبات مصادَق عليها إلى واجهة برمجة تطبيقات REST الخاصة بـ Realtime Database، عليك تمرير الرمز المميز المعرّف الذي تم إنشاؤه أعلاه كمعلَمة سلسلة طلب البحث auth=<ID_TOKEN>. في ما يلي مثال على curl طلب لقراءة اسم "آدا":

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

احرص على استبدال <DATABASE_NAME> باسم Realtime Database واستبدال <ID_TOKEN> برمز مميّز لمعرّف Firebase.

سيتم الإشارة إلى الطلب الناجح باستخدام رمز حالة HTTP 200 OK. يتضمّن الرد البيانات التي يتم استرجاعها:

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

الرموز المميزة القديمة

إذا كنت لا تزال تستخدم الرموز المميزة القديمة للمصادقة في Firebase، ننصحك بتعديل المصادقة عبر REST إلى إحدى طرق المصادقة الموضّحة أعلاه.

لا تزال واجهة Realtime Database REST API تتيح المصادقة باستخدام رموز المصادقة القديمة، بما في ذلك الأسرار. يمكن العثور على أسرار Realtime Database في قسم حسابات الخدمة في وحدة تحكّم Firebase.

الأسرار هي بيانات اعتماد طويلة الأمد. ننصحك بإنشاء سر جديد وإبطال السر الحالي عند إزالة مستخدمين لديهم إذن وصول باستخدام سر (مثل المالكين) من مشروع.