REST İsteklerinin Kimliğini Doğrulama

Firebase SDK'ları, kimlik doğrulama ve Firebase Realtime Database ile olan tüm iletişimi sizin adınıza yönetir. Ancak istemci SDK'sı bulunmayan bir ortamdaysanız veya kalıcı veritabanı bağlantısının yükünden kaçınmak istiyorsanız veri 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 jetonları: Genellikle Realtime Database'den veri okuma ve Realtime Database'ye veri yazma özelliği Realtime Database Kuralları tarafından yönetilir. Ancak bir sunucudan verilerinize erişebilir ve bir hizmet hesabından oluşturulan Google OAuth2 erişim jetonuyla bu sunucuya verilerinize tam okuma ve yazma erişimi verebilirsiniz.

  2. Firebase kimlik jetonları: İstekleri tek bir kullanıcı olarak kimliği doğrulanmış şekilde göndermek isteyebilirsiniz (ör. istemci SDK'larında Realtime Database kurallarıyla erişimi sınırlama). REST API, istemci SDK'ları tarafından kullanılan Firebase kimlik jetonlarını kabul eder.

Google OAuth2 erişim jetonları

Realtime Database Kurallarınıza göre herkese açık olarak okunabilen veya yazılabilen tüm veriler, REST API üzerinden kimlik doğrulaması olmadan da okunabilir ve yazılabilir. Ancak sunucunuzun Realtime Database kurallarınızı atlamasını istiyorsanız okuma ve yazma isteklerinizin kimliğini doğrulamanız gerekir. Google OAuth2 üzerinden kimlik doğrulaması için aşağıdaki adımlar gerekir:

  1. Erişim jetonu oluşturun.
  2. Bu erişim jetonuyla kimlik doğrulama yapın.

Erişim jetonu oluşturma

Realtime Database REST API, standart Google OAuth2 erişim jetonlarını kabul eder. Erişim jetonları, Realtime Database hesabınıza uygun izinlere sahip bir hizmet hesabı kullanılarak oluşturulabilir. Firebase konsolunun Hizmet Hesapları bölümünün alt kısmındaki Yeni Gizli Anahtar Oluştur düğmesini tıklayarak, daha önce yoksa yeni bir hizmet hesabı anahtarı dosyası oluşturabilirsiniz.

Hizmet hesabı anahtar dosyanız olduğunda, aşağıdaki zorunlu kapsamları içeren 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'sinde kimlik doğrulaması yapmak için Google OAuth2 erişim jetonlarının nasıl oluşturulacağını gösteren bazı örnek uygulamalar aşağıda verilmiştir:

Node.js

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

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 istemci kitaplığını kullanarak:

// 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 kitaplığını kullanarak:

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 jetonuyla kimlik doğrulama

Realtime Database REST API'ye kimliği doğrulanmış istekler göndermek için yukarıda oluşturulan Google OAuth2 erişim jetonunu Authorization: Bearer <ACCESS_TOKEN> üstbilgisi veya access_token=<ACCESS_TOKEN> sorgu dizesi parametresi olarak iletin. Ada'nın adını okumak için örnek bir curl istek:

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

<DATABASE_NAME> değerini Realtime Database alanınızın adıyla, <ACCESS_TOKEN> değerini ise bir Google OAuth2 erişim jetonuyla değiştirdiğinizden emin olun.

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

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

Firebase kimlik jetonları

Bir kullanıcı veya cihaz Firebase Authentication kullanarak oturum açtığında Firebase, kullanıcıyı benzersiz şekilde tanımlayan ve Realtime Database ve Cloud Storage gibi çeşitli kaynaklara erişim izni veren ilgili bir kimlik jetonu oluşturur. Realtime Database REST API'sinin kimliğini doğrulamak ve söz konusu kullanıcı adına istek göndermek için bu kimlik jetonunu yeniden kullanabilirsiniz.

Kimlik jetonu oluşturma

Firebase kimlik jetonunu istemciden almak için İstemcilerde kimlik jetonlarını alma başlıklı makaledeki adımları uygulayın.

Kimlik jetonlarının kısa bir süre sonra geçerlilik süresinin sona erdiğini ve alındıktan sonra mümkün olduğunca hızlı bir şekilde kullanılmasını unutmayın.

Kimlik jetonuyla kimlik doğrulama

Realtime Database REST API'ye kimliği doğrulanmış istekler göndermek için yukarıda oluşturulan kimlik jetonunu auth=<ID_TOKEN> sorgu dizesi parametresi olarak iletin. Ada'nın adını okumak için örnek bir curl isteği aşağıda verilmiştir:

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

<DATABASE_NAME> yerine Realtime Database'ünüzü, <ID_TOKEN> yerine ise bir Firebase kimlik jetonu ekleyin.

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

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

Eski jetonlar

Eski Firebase kimlik doğrulama jetonlarını kullanmaya devam ediyorsanız REST kimlik doğrulamanızı yukarıda açıklanan kimlik doğrulama yöntemlerinden birine güncellemenizi öneririz.

Realtime Database REST API, gizli anahtarlar da dahil olmak üzere eski kimlik doğrulama jetonları aracılığıyla kimlik doğrulamayı desteklemeye devam etmektedir. Realtime Database Gizli anahtarlarınızı Firebase konsolunun Hizmet Hesapları bölümünde bulabilirsiniz.

Gizli anahtarlar uzun ömürlü kimlik bilgileridir. Gizli erişimi olan kullanıcıları (sahipler gibi) bir projeden kaldırırken yeni bir gizli anahtar oluşturmanızı ve mevcut anahtarı iptal etmenizi öneririz.