تتولّى حزم Firebase SDK جميع عمليات المصادقة والتواصل مع الـ Firebase Realtime Database نيابةً عنك. ومع ذلك، إذا كنت في بيئة لا تتضمّن حزمة SDK للعميل أو إذا أردت تجنُّب النفقات العامة لاتصال قاعدة بيانات مستمر، يمكنك الاستفادة من Realtime Database REST API لقراءة البيانات وكتابتها.
يمكنك المصادقة على هوية المستخدمين من خلال إحدى الطرق التالية:
رموز الدخول عبر Google OAuth2 : عادةً ما تخضع إمكانية القراءة من Realtime Database والكتابة فيها لقواعد Realtime Database.Realtime DatabaseRealtime Database ولكن يمكنك الوصول إلى بياناتك من خادم ومنح هذا الخادم إذن القراءة والكتابة الكاملَين لبياناتك باستخدام رمز دخول عبر Google OAuth2 تم إنشاؤه من حساب خدمة.
رموز تعريف Firebase : قد تحتاج أيضًا إلى إرسال طلبات تمت المصادقة عليها كمستخدم فردي، مثل تقييد الوصول باستخدام قواعد Realtime Database على حزم SDK للعميل. تقبل واجهة REST API رموز تعريف Firebase نفسها التي تستخدمها حزم SDK للعميل.
رموز الدخول عبر Google OAuth2
يمكن أيضًا قراءة أي بيانات أو كتابتها بشكل علني من خلال واجهة REST API بدون أي مصادقة، وذلك وفقًا لقواعد Realtime Database. ومع ذلك، إذا أردت أن يتجاوز الخادم قواعد Realtime Database، عليك المصادقة على طلبات القراءة والكتابة تتطلّب المصادقة من خلال Google OAuth2 الخطوات التالية:
- إنشاء رمز دخول
- المصادقة باستخدام رمز الدخول هذا
إنشاء رمز دخول
تقبل Realtime Database REST API رموز الدخول العادية عبر Google OAuth2. يمكن إنشاء رموز الدخول باستخدام حساب خدمة لديه الأذونات المناسبة للوصول إلى Realtime Database. يسمح لك النقر على الزر إنشاء مفتاح خاص جديد في أسفل قسم حسابات الخدمة في Firebase console بإنشاء ملف مفتاح حساب خدمة جديد بسهولة إذا لم يكن لديك ملف حاليًا.
بعد الحصول على ملف مفتاح حساب خدمة، يمكنك استخدام إحدى مكتبات عميل Google API لإنشاء رمز دخول عبر Google OAuth2 مع النطاقات المطلوبة التالية:
https://www.googleapis.com/auth/userinfo.emailhttps://www.googleapis.com/auth/firebase.database
في ما يلي بعض نماذج عمليات التنفيذ التي توضّح كيفية إنشاء رموز دخول عبر Google OAuth2 للمصادقة على Realtime Database REST API بلغات متنوعة:
Node.js
باستخدام Google API Client Library for 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 Client Library for 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 لقراءة اسم Ada:
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 من العميل، اتّبِع الخطوات الواردة في استرداد رموز التعريف على العملاء.
يُرجى العِلم أنّ رموز التعريف تنتهي صلاحيتها بعد فترة قصيرة من الوقت، ويجب استخدامها بأسرع وقت ممكن بعد استردادها.
المصادقة باستخدام رمز تعريف
لإرسال طلبات تمت المصادقة عليها إلى 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 Database و<ID_TOKEN> برمز تعريف Firebase.
سيتم الإشارة إلى الطلب الناجح من خلال رمز حالة HTTP 200 OK. يحتوي الردّ على البيانات التي يتم استردادها:
{"first":"Ada","last":"Lovelace"}
الرموز المميّزة القديمة
إذا كنت لا تزال تستخدم رموز المصادقة القديمة في Firebase، ننصحك بتحديث مصادقة REST إلى إحدى طرق المصادقة الموضّحة أعلاه.
لا تزال Realtime Database REST API تتيح المصادقة من خلال رموز المصادقة القديمة ، بما في ذلك الأسرار. يمكن العثور على أسرار Realtime Database في قسم حسابات الخدمة في Firebase console.
الأسرار هي بيانات اعتماد طويلة الأمد. ننصحك بإنشاء سر جديد و إبطال السر الحالي عند إزالة مستخدمين لديهم إذن الوصول إلى الأسرار (مثل المالكين) من مشروع.