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

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

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

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

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

رموز دخول Google OAuth2

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

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

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

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

بعد توفُّر ملف مفتاح حساب الخدمة، يمكنك استخدام أحد مكتبات برامج واجهة Google API لإنشاء رمز الدخول إلى 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 لنظام التشغيل 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> باسم قاعدة البيانات في الوقت الفعلي و<ACCESS_TOKEN> مع رمز الدخول Google OAuth2.

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

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

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

عندما يسجّل أحد المستخدمين أو الأجهزة الدخول باستخدام مصادقة Firebase، يُنشئ Firebase الرمز المميز المقابل الذي يحدده بشكل فريد ويمنحه إمكانية الوصول العديد من الموارد، مثل قاعدة بيانات الوقت الفعلي و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> باسم قاعدة البيانات في الوقت الفعلي و<ID_TOKEN> مع رمز مميز لمعرّف Firebase.

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

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

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

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

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

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