REST İsteklerini Doğrula

Firebase SDK'ları, Firebase Gerçek Zamanlı Veritabanıyla olan tüm kimlik doğrulama ve iletişimi sizin adınıza yönetir. Ancak, istemci SDK'sı olmayan bir ortamda olduğunuzda veya kalıcı bir veritabanı bağlantısının getirdiği ek yükten kaçınmak istediğinizde, verileri okumak ve yazmak için Realtime Database REST API'yi kullanabilirsiniz.

Kullanıcıların kimliğini aşağıdaki yöntemlerden biriyle doğrulayın:

  1. Google OAuth2 erişim belirteçleri - Tipik olarak, Gerçek Zamanlı Veritabanından okuma ve ona yazma yeteneği, Gerçek Zamanlı Veritabanı Kurallarına tabidir. Ancak verilerinize bir sunucudan erişebilir ve bir hizmet hesabından oluşturulan Google OAuth2 erişim jetonunu kullanarak bu sunucuya, verilerinize tam okuma ve yazma erişimi verebilirsiniz.

  2. Firebase ID belirteçleri - İstemci SDK'larındaki Gerçek Zamanlı Veritabanı Kuralları ile erişimi sınırlamak gibi, bireysel kullanıcı olarak kimliği doğrulanmış istekler de göndermek isteyebilirsiniz. REST API, istemci SDK'ları tarafından kullanılan Firebase ID jetonlarının aynısını kabul eder.

Google OAuth2 erişim belirteçleri

Gerçek Zamanlı Veritabanı Kurallarınıza göre genel olarak okunabilen veya yazılabilen tüm veriler, herhangi bir kimlik doğrulaması olmadan REST API aracılığıyla da okunabilir ve yazılabilir. Ancak sunucunuzun Gerçek Zamanlı Veritabanı Kurallarınızı atlamasını istiyorsanız okuma ve yazma isteklerinizin kimliğini doğrulamanız gerekir. Google OAuth2 üzerinden kimlik doğrulama aşağıdaki adımları gerektirir:

  1. Bir erişim belirteci oluşturun.
  2. Bu erişim belirteciyle kimlik doğrulaması yapın.

Erişim belirteci oluşturun

Realtime Database REST API, standart Google OAuth2 erişim belirteçlerini kabul eder. Erişim belirteçleri, Gerçek Zamanlı Veritabanınız için uygun izinlere sahip bir hizmet hesabı kullanılarak oluşturulabilir. Firebase konsolunun Hizmet Hesapları bölümünün altındaki Yeni Özel Anahtar Oluştur düğmesini tıklamak, halihazırda bir tane yoksa kolayca yeni bir hizmet hesabı anahtar dosyası oluşturmanıza olanak tanır.

Bir hizmet hesabı anahtar dosyanız olduğunda, aşağıdaki gerekli kapsamlara sahip bir Google OAuth2 erişim jetonu oluşturmak için Google API istemci kitaplıklarından birini kullanabilirsiniz:

  • https://www.googleapis.com/auth/userinfo.email
  • https://www.googleapis.com/auth/firebase.database

Çeşitli dillerde Realtime Database REST API'de kimlik doğrulaması yapmak için Google OAuth2 erişim belirteçlerinin nasıl oluşturulacağını gösteren bazı örnek uygulamaları burada bulabilirsiniz:

Node.js

Node.js için Google API İstemci Kitaplığını Kullanma:

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

Java için Google API İstemci Kitaplığını Kullanma:

// 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.

Piton

google-auth kütüphanesini kullanma:

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

Erişim belirteciyle kimlik doğrulama

Gerçek Zamanlı Veritabanı REST API'sine kimliği doğrulanmış istekler göndermek için yukarıda oluşturulan Google OAuth2 erişim belirtecini Yetkilendirme Authorization: Bearer <ACCESS_TOKEN> üstbilgisi veya access_token=<ACCESS_TOKEN> sorgu dizesi parametresi olarak iletin. İşte Ada'nın adını okumak için örnek bir curl isteği:

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

<DATABASE_NAME> yerine Gerçek Zamanlı Veritabanınızın adını ve <ACCESS_TOKEN> kısmını Google OAuth2 erişim belirteciyle değiştirdiğinizden emin olun.

Başarılı bir istek, 200 OK HTTP durum koduyla gösterilecektir. Yanıt, alınan verileri içerir:

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

Firebase kimliği jetonları

Bir kullanıcı veya cihaz Firebase Authentication'ı kullanarak oturum açtığında Firebase, kendisini benzersiz şekilde tanımlayan ve Gerçek Zamanlı Veritabanı ve Bulut Depolama gibi çeşitli kaynaklara erişmesine izin veren karşılık gelen bir kimlik belirteci oluşturur. Realtime Database REST API'nin kimliğini doğrulamak ve söz konusu kullanıcı adına istekte bulunmak için bu kimlik belirtecini yeniden kullanabilirsiniz.

Kimlik jetonu oluştur

Firebase ID jetonunu istemciden almak için İstemcilerdeki ID jetonlarını alma bölümündeki adımları izleyin.

Kimlik belirteçlerinin kısa bir süre sonra süresinin dolacağını ve alındıktan sonra mümkün olan en kısa sürede kullanılması gerektiğini unutmayın.

Kimlik belirteci ile kimlik doğrulama

Gerçek Zamanlı Veritabanı REST API'sine kimliği doğrulanmış istekler göndermek için yukarıda oluşturulan kimlik belirtecini auth=<ID_TOKEN> sorgu dizesi parametresi olarak iletin. İşte Ada'nın adını okumak için örnek bir curl isteği:

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

<DATABASE_NAME> yerine Gerçek Zamanlı Veritabanınızın adını ve <ID_TOKEN> kısmını Firebase ID belirteciyle değiştirdiğinizden emin olun.

Başarılı bir istek, 200 OK HTTP durum koduyla gösterilecektir. Yanıt, alınan verileri içerir:

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

Eski jetonlar

Hala eski Firebase kimlik doğrulama jetonlarını kullanıyorsanız REST kimlik doğrulamanızı yukarıda açıklanan kimlik doğrulama yöntemlerinden biriyle güncellemenizi öneririz.

Realtime Database REST API, sırlar da dahil olmak üzere eski kimlik doğrulama belirteçleri aracılığıyla kimlik doğrulamayı hâlâ desteklemektedir. Gerçek Zamanlı Veritabanı sırlarınız Firebase konsolunun Hizmet Hesapları bölümünde bulunabilir.

Sırlar uzun ömürlü kimlik bilgileridir. Gizli erişime sahip kullanıcıları (sahipler gibi) bir projeden çıkarırken yeni bir sır oluşturmanızı ve mevcut sırrı iptal etmenizi öneririz.