احراز هویت درخواست های REST

SDK های Firebase کلیه احراز هویت و ارتباطات با پایگاه داده بیدرنگ Firebase را از طرف شما انجام می دهند. با این حال، وقتی در محیطی هستید که SDK مشتری ندارد یا می‌خواهید از سربار اتصال دائمی پایگاه داده جلوگیری کنید، می‌توانید از Realtime Database REST API برای خواندن و نوشتن داده‌ها استفاده کنید.

احراز هویت کاربران از طریق یکی از روش های زیر:

  1. نشانه‌های دسترسی Google OAuth2 - معمولاً، توانایی خواندن و نوشتن در پایگاه داده بیدرنگ توسط قوانین پایگاه داده بیدرنگ کنترل می‌شود. اما، می‌توانید از طریق یک سرور به داده‌های خود دسترسی داشته باشید و به آن سرور اجازه دسترسی کامل خواندن و نوشتن به داده‌های خود را با یک توکن دسترسی Google OAuth2 ایجاد شده از یک حساب سرویس بدهید.

  2. نشانه‌های Firebase ID - همچنین ممکن است بخواهید درخواست‌هایی را به‌عنوان یک کاربر تأیید شده ارسال کنید، مانند محدود کردن دسترسی با قوانین پایگاه داده بیدرنگ در SDKهای مشتری. REST API همان نشانه‌های Firebase ID مورد استفاده توسط SDKهای سرویس گیرنده را می‌پذیرد.

توکن های دسترسی Google OAuth2

هر داده ای که طبق قوانین پایگاه داده بیدرنگ شما به صورت عمومی قابل خواندن یا نوشتن باشد نیز از طریق REST API بدون هیچ گونه احراز هویت قابل خواندن و نوشتن است. با این حال، اگر می خواهید سرور شما قوانین پایگاه داده بیدرنگ شما را دور بزند، باید درخواست های خواندن و نوشتن خود را احراز هویت کنید. احراز هویت از طریق Google OAuth2 به مراحل زیر نیاز دارد:

  1. یک نشانه دسترسی ایجاد کنید.
  2. با آن نشانه دسترسی احراز هویت کنید.

یک نشانه دسترسی ایجاد کنید

Realtime Database REST API توکن‌های استاندارد دسترسی Google OAuth2 را می‌پذیرد. نشانه های دسترسی را می توان با استفاده از یک حساب سرویس با مجوزهای مناسب برای پایگاه داده بیدرنگ شما ایجاد کرد. با کلیک بر روی دکمه 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 به زبان‌های مختلف ایجاد کرد:

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 پایگاه داده بیدرنگ، رمز دسترسی 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> با نام پایگاه داده بیدرنگ خود و <ACCESS_TOKEN> را با یک نشانه دسترسی Google OAuth2 جایگزین کنید.

یک درخواست موفق با کد وضعیت HTTP 200 OK نشان داده می شود. پاسخ حاوی داده های در حال بازیابی است:

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

توکن های Firebase ID

هنگامی که یک کاربر یا دستگاه با استفاده از احراز هویت Firebase وارد سیستم می‌شود، Firebase یک نشانه شناسه مربوطه ایجاد می‌کند که به طور منحصربه‌فرد آنها را شناسایی می‌کند و به آنها اجازه دسترسی به چندین منبع، مانند پایگاه داده بیدرنگ و ذخیره‌سازی ابری را می‌دهد. می‌توانید برای احراز هویت Realtime Database REST API و درخواست‌هایی از طرف آن کاربر، از آن کد ID دوباره استفاده کنید.

یک رمز شناسه تولید کنید

برای بازیابی کد Firebase ID از مشتری، مراحل موجود در Retrieve ID Tokens on Clients را دنبال کنید.

توجه داشته باشید که رمزهای ID پس از مدت کوتاهی منقضی می شوند و پس از بازیابی آنها باید در سریع ترین زمان ممکن استفاده شوند.

با شناسه شناسه احراز هویت

برای ارسال درخواست‌های احراز هویت شده به API REST پایگاه داده بیدرنگ، کد ID ایجاد شده در بالا را به عنوان پارامتر رشته پرس و جو auth=<ID_TOKEN> ارسال کنید. در اینجا یک نمونه درخواست curl برای خواندن نام آدا آمده است:

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

مطمئن شوید که <DATABASE_NAME> با نام پایگاه داده بیدرنگ خود و <ID_TOKEN> را با یک نشانه Firebase ID جایگزین کنید.

یک درخواست موفق با کد وضعیت HTTP 200 OK نشان داده می شود. پاسخ حاوی داده های در حال بازیابی است:

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

توکن های قدیمی

اگر همچنان از نشانه‌های احراز هویت قدیمی Firebase استفاده می‌کنید، توصیه می‌کنیم احراز هویت REST خود را به یکی از روش‌های احراز هویت که در بالا توضیح داده شد به‌روزرسانی کنید.

API REST پایگاه داده بیدرنگ همچنان از احراز هویت از طریق نشانه‌های احراز هویت قدیمی، از جمله رازها پشتیبانی می‌کند. اسرار پایگاه داده بیدرنگ شما را می‌توانید در بخش حساب‌های خدمات کنسول Firebase پیدا کنید.

اسرار اعتبار طولانی مدت هستند. توصیه می کنیم هنگام حذف کاربران با دسترسی مخفی (مانند مالکان) از پروژه، یک راز جدید ایجاد کنید و رمز موجود را لغو کنید.