SDK های Firebase کلیه احراز هویت و ارتباطات با Firebase Realtime Database را از طرف شما انجام می دهند. با این حال، وقتی در محیطی هستید که SDK مشتری ندارد یا میخواهید از سربار اتصال دائمی پایگاه داده جلوگیری کنید، میتوانید از Realtime Database REST API برای خواندن و نوشتن دادهها استفاده کنید.
احراز هویت کاربران از طریق یکی از روش های زیر:
نشانههای دسترسی Google OAuth2 - معمولاً، توانایی خواندن و نوشتن در Realtime Database توسط قوانین Realtime Database کنترل میشود. اما، میتوانید از طریق یک سرور به دادههای خود دسترسی داشته باشید و به آن سرور اجازه دسترسی کامل خواندن و نوشتن به دادههای خود را با یک توکن دسترسی Google OAuth2 ایجاد شده از یک حساب سرویس بدهید.
نشانههای Firebase ID - همچنین ممکن است بخواهید درخواستهایی را بهعنوان یک کاربر تأیید شده ارسال کنید، مانند محدود کردن دسترسی با قوانین Realtime Database در SDKهای مشتری. REST API همان نشانههای Firebase ID مورد استفاده توسط SDKهای سرویس گیرنده را میپذیرد.
توکن های دسترسی Google OAuth2
هر داده ای که طبق قوانین Realtime Database شما به صورت عمومی قابل خواندن یا نوشتن باشد نیز از طریق REST API بدون هیچ گونه احراز هویت قابل خواندن و نوشتن است. However, if you want your server to bypass your Realtime Database Rules, you need to authenticate your read and write requests. احراز هویت از طریق Google OAuth2 به مراحل زیر نیاز دارد:
- یک نشانه دسترسی ایجاد کنید.
- با آن نشانه دسترسی احراز هویت کنید.
یک نشانه دسترسی ایجاد کنید
Realtime Database REST API توکنهای استاندارد دسترسی Google OAuth2 را میپذیرد. نشانه های دسترسی را می توان با استفاده از یک حساب سرویس با مجوزهای مناسب برای Realtime Database شما ایجاد کرد. با کلیک بر روی دکمه Generate New Private Key در پایین بخش Service Accounts کنسول Firebase به شما این امکان را می دهد که اگر قبلاً فایلی ندارید، به راحتی یک فایل کلید حساب کاربری جدید ایجاد کنید.
هنگامی که یک فایل کلید حساب سرویس دارید، می توانید از یکی از کتابخانه های سرویس گیرنده Google API برای ایجاد یک نشانه دسترسی Google OAuth2 با دامنه های مورد نیاز زیر استفاده کنید:
-
https://www.googleapis.com/auth/userinfo.email
-
https://www.googleapis.com/auth/firebase.database
در اینجا چند نمونه پیادهسازی وجود دارد که نشان میدهد چگونه میتوان توکنهای دسترسی Google OAuth2 را برای احراز هویت به API REST Realtime Database به زبانهای مختلف ایجاد کرد:
Node.js
استفاده از Google API Client Library برای 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 Library برای جاوا :
// 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
احراز هویت با یک نشانه دسترسی
برای ارسال درخواستهای احراز هویت شده به API REST Realtime Database ، رمز دسترسی 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>
با نام Realtime Database خود و <ACCESS_TOKEN>
را با یک نشانه دسترسی Google OAuth2 جایگزین کنید.
یک درخواست موفق با کد وضعیت HTTP 200 OK
نشان داده می شود. پاسخ حاوی داده های در حال بازیابی است:
{"first":"Ada","last":"Lovelace"}
توکن های Firebase ID
هنگامی که کاربر یا دستگاهی با استفاده از Firebase Authentication وارد سیستم میشود، Firebase یک کد شناسه مربوطه ایجاد میکند که به طور منحصربهفرد آنها را شناسایی میکند و به آنها اجازه دسترسی به چندین منبع، مانند Realtime Database و Cloud Storage را میدهد. میتوانید برای احراز هویت Realtime Database REST API و درخواستهایی از طرف آن کاربر، از آن کد ID دوباره استفاده کنید.
یک رمز شناسه تولید کنید
برای بازیابی کد Firebase ID از مشتری، مراحل موجود در Retrieve ID Tokens on Clients را دنبال کنید.
توجه داشته باشید که رمزهای ID پس از مدت کوتاهی منقضی می شوند و پس از بازیابی آنها باید در سریع ترین زمان ممکن استفاده شوند.
با شناسه شناسه احراز هویت
برای ارسال درخواستهای احراز هویت شده به API REST Realtime Database ، کد ID ایجاد شده در بالا را به عنوان پارامتر رشته پرس و جو auth=<ID_TOKEN>
ارسال کنید. در اینجا یک نمونه درخواست curl
برای خواندن نام آدا آمده است:
curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?auth=<ID_TOKEN>"
مطمئن شوید که <DATABASE_NAME>
با نام Realtime Database خود و <ID_TOKEN>
را با یک نشانه Firebase ID جایگزین کنید.
یک درخواست موفق با کد وضعیت HTTP 200 OK
نشان داده می شود. پاسخ حاوی داده های در حال بازیابی است:
{"first":"Ada","last":"Lovelace"}
توکن های قدیمی
اگر همچنان از نشانههای احراز هویت قدیمی Firebase استفاده میکنید، توصیه میکنیم احراز هویت REST خود را به یکی از روشهای احراز هویت که در بالا توضیح داده شد بهروزرسانی کنید.
API REST Realtime Database همچنان از احراز هویت از طریق نشانههای احراز هویت قدیمی، از جمله رازها پشتیبانی میکند. اسرار Realtime Database شما را میتوانید در بخش حسابهای خدمات کنسول Firebase پیدا کنید.
اسرار اعتبار طولانی مدت هستند. توصیه می کنیم هنگام حذف کاربران با دسترسی مخفی (مانند مالکان) از پروژه، یک راز جدید ایجاد کنید و رمز موجود را لغو کنید.