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

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

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

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

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

رموز الوصول إلى Google OAuth2

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

  1. إنشاء رمز وصول.
  2. قم بالمصادقة باستخدام رمز الوصول هذا.

إنشاء رمز وصول

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

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

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

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

Node.js

استخدام مكتبة عميل Google API لـ 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 لجافا :

// 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 لقراءة اسم Ada:

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 بإنشاء رمز معرف مطابق يحدده بشكل فريد ويمنحه الوصول إلى العديد من الموارد، مثل Realtime Database وCloud Storage. يمكنك إعادة استخدام رمز المعرف هذا لمصادقة Realtime Database REST API وتقديم طلبات نيابة عن هذا المستخدم.

إنشاء رمز معرف

لاسترداد رمز Firebase ID المميز من العميل، اتبع الخطوات الواردة في استرداد الرموز المميزة للمعرف على العملاء .

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

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

لإرسال طلبات تمت مصادقتها إلى Realtime Database REST API، قم بتمرير رمز المعرف الذي تم إنشاؤه أعلاه كمعلمة سلسلة الاستعلام auth=<ID_TOKEN> . فيما يلي مثال لطلب curl لقراءة اسم Ada:

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

تأكد من استبدال <DATABASE_NAME> باسم قاعدة بيانات Realtime و <ID_TOKEN> برمز معرف Firebase المميز.

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

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

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

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

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

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