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

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

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

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

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

رموز دخول Google OAuth2

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

  1. أنشئ رمز دخول.
  2. يمكنك المصادقة باستخدام رمز الدخول هذا.

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

تقبل واجهة برمجة التطبيقات Realtime Database REST عادي رموز الدخول إلى 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 بلغات مختلفة:

Node.js

استخدام مكتبة برامج Google API لنظام التشغيل Android 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.
  }
});

جافا

استخدام مكتبة برامج Google API لنظام التشغيل Android 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

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

لإرسال الطلبات التي تمت مصادقتها إلى 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.

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

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

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

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

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

لاسترداد الرمز المميز لرقم تعريف 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.

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

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

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

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

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

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