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

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

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

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

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

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

أي بيانات يمكن قراءتها بشكل عام أو قابلة للكتابة وفقًا لقواعد قاعدة بيانات Realtime الخاصة بك يمكن قراءتها وكتابتها عبر واجهة برمجة تطبيقات REST دون أي مصادقة. ومع ذلك ، إذا كنت تريد أن يتجاوز خادمك قواعد قاعدة بيانات Realtime ، فأنت بحاجة إلى مصادقة طلبات القراءة والكتابة الخاصة بك. تتطلب المصادقة من خلال 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 Client لجافا :

// 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> باسم قاعدة بيانات Realtime و <ACCESS_TOKEN> وصول Google OAuth2.

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

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

رموز معرف Firebase

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

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

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

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

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

لإرسال الطلبات المصادق عليها إلى 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 Database الخاصة بك في قسم حسابات الخدمة بوحدة تحكم Firebase.