تتعامل حزم تطوير البرامج (SDK) من Firebase بالنيابة عنك مع كافة عمليات المصادقة والاتصالات مع قاعدة بيانات Firebase Realtime. ومع ذلك ، عندما تكون في بيئة لا تحتوي على عميل SDK أو تريد تجنب الحمل الزائد لاتصال قاعدة بيانات دائم ، يمكنك الاستفادة من Realtime Database REST API لقراءة البيانات وكتابتها.
مصادقة المستخدمين بإحدى الطرق التالية:
رموز الوصول إلى Google OAuth2 - عادةً ما تكون القدرة على القراءة من قاعدة بيانات Realtime والكتابة فيها محكومة بقواعد Realtime Database . ولكن ، يمكنك الوصول إلى بياناتك من خادم ومنح هذا الخادم حق الوصول الكامل للقراءة والكتابة إلى بياناتك من خلال رمز وصول Google OAuth2 الذي تم إنشاؤه من حساب الخدمة.
رموز معرف Firebase - قد ترغب أيضًا في إرسال الطلبات المصادق عليها كمستخدم فردي ، مثل تقييد الوصول باستخدام قواعد قاعدة بيانات Realtime على حزم SDK للعميل. تقبل واجهة برمجة تطبيقات REST نفس رموز معرف Firebase التي تستخدمها مجموعات تطوير البرامج (SDK) الخاصة بالعميل.
رموز الوصول إلى Google OAuth2
أي بيانات يمكن قراءتها بشكل عام أو قابلة للكتابة وفقًا لقواعد قاعدة بيانات Realtime الخاصة بك هي أيضًا قابلة للقراءة والكتابة عبر REST API دون أي مصادقة. ومع ذلك ، إذا كنت تريد أن يتجاوز الخادم الخاص بك قواعد قاعدة بيانات Realtime ، فأنت بحاجة إلى مصادقة طلبات القراءة والكتابة الخاصة بك. تتطلب المصادقة من خلال Google OAuth2 الخطوات التالية:
- إنشاء رمز وصول.
- المصادقة باستخدام رمز الوصول هذا.
إنشاء رمز وصول
تقبل واجهة 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.