REST İsteklerinin Kimliğini Doğrulama

Firebase SDK'ları Firebase Realtime Database sizin adınıza. Ancak, bir projede istemci SDK'sı olmayan veya SDK'nın ek yükünden kaçınmak kalıcı bir veritabanı bağlantısı kuracaksanız Veri okumak ve yazmak için Realtime Database REST API.

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

  1. Google OAuth2 erişim jetonları: Genellikle, bir web sitesinden veri Realtime Database'e yazma şuna tabidir: Gerçek Zamanlı Veritabanı Kuralları. Ancak, kendi verilerinize o sunucuya sunucudan sunucuya tam okuma ve yazma erişimi bir hizmet hesabından oluşturulmuş bir Google OAuth2 erişim jetonuna sahip verileri içerir.

  2. Firebase kimlik jetonları - Kimliği doğrulanmış istekleri de göndermek isteyebilirsiniz (ör. Gerçek Zamanlı Veritabanı Kuralları ile erişimi sınırlandırmak) izin verilmez. REST API, izin verilmez.

Google OAuth2 erişim jetonları

Google Hizmet Şartları'na göre herkese açık olarak okunabilen veya yazılabilen tüm veriler Gerçek Zamanlı Veritabanı Kuralları da okunabilir ve yazılabilir hiçbir kimlik doğrulama yapmadan REST API üzerinden iletişim kurabilirsiniz. Ancak, sunucunuzun Gerçek Zamanlı Veritabanı Kurallarınızı atlamak için okuma ve yazma kabul edersiniz. Google OAuth2 aracılığıyla kimlik doğrulama için şu adımların uygulanması gerekir:

  1. Erişim jetonu oluşturun.
  2. Bu erişim jetonuyla kimliğinizi doğrulayın.

Erişim jetonu oluşturma

Realtime Database REST API şunları kabul eder: standart Google OAuth2 erişim jetonları. Erişim jetonları, doğru erişim iznine sahip bir hizmet hesabı kullanılarak oluşturulabilir. Gerçek Zamanlı Veritabanınız için izinler. Yeni Gizli Öğe Oluştur'u tıkladığınızda, Anahtar düğmesi altındaki Hizmet Hesapları bölümü, yeni bir hizmeti kolayca oluşturmanızı sağlar. hesap anahtar dosyanızı.

Bir hizmet hesabı anahtar dosyanız olduğunda Google API istemci kitaplıkları kullanarak aşağıdaki gerekli kapsamlara sahip bir Google OAuth2 erişim jetonu oluşturun:

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

Google OAuth2'nin nasıl oluşturulacağını gösteren bazı örnek uygulamaları aşağıda bulabilirsiniz Realtime Database REST API'de kimlik doğrulamak için jetonlara erişme çeşitli dillerde mevcuttur:

Node.js

Google API İstemci Kitaplığı'nı kullanarak 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.
  }
});

Java

Google API İstemci Kitaplığı'nı kullanarak Java:

// 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'ı kullanma kitaplık:

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ğrulayın

Realtime Database REST API'ye kimliği doğrulanmış istek göndermek için Yukarıda oluşturulan Google OAuth2 erişim jetonu Authorization: Bearer <ACCESS_TOKEN> üstbilgisi veya access_token=<ACCESS_TOKEN> sorgu dizesi parametresi. curl örneğini inceleyin. Ada'nın adını okuma isteği:

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

<DATABASE_NAME> yerine Google OAuth2 erişim jetonuyla Realtime Database ve <ACCESS_TOKEN>.

Başarılı bir istek, 200 OK HTTP durum koduyla gösterilir. İlgili içeriği oluşturmak için kullanılan 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, onları benzersiz şekilde tanımlayan ve erişim izni veren karşılık gelen kimlik jetonu Realtime Database ve Cloud Storage gibi çeşitli kaynaklar. Yeniden kullanabilirsiniz Realtime Database REST API kimliğini doğrulamak ve üzerinde istek yapmak için oluşturabilirsiniz.

Kimlik jetonu oluşturun

İstemciden Firebase kimliği jetonunu almak için şuradaki adımları uygulayın: İstemcilerdeki kimlik jetonlarını alma.

Kimlik jetonlarının kullanım süresinin kısa bir süre sonra sona erdiğini ve bu jetonların kullanılması gerektiğini unutmayın. mümkün olduğunca hızlı bir şekilde alabilirsiniz.

Kimlik jetonuyla kimlik doğrulayın

Realtime Database REST API'ye kimliği doğrulanmış istek göndermek için Yukarıda auth=<ID_TOKEN> sorgu dizesi parametresi olarak oluşturulan kimlik jetonu. Burası Ada'nın adını okumak için örnek bir curl isteğidir:

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

<DATABASE_NAME> yerine Firebase kimlik jetonuyla birlikte Realtime Database ve <ID_TOKEN>.

Başarılı bir istek, 200 OK HTTP durum koduyla gösterilir. İlgili içeriği oluşturmak için kullanılan yanıt, alınan verileri içerir:

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

Eski jetonlar

Hâlâ eski Firebase kimlik doğrulama jetonlarını kullanıyorsanız şunları yapmanızı öneririz: REST kimlik doğrulamanızı, açıklanan kimlik doğrulama yöntemlerinden biriyle güncelleyerek bölümünü ziyaret edin.

Realtime Database REST API, eski üzerinden kimlik doğrulamayı da destekliyor kimlik doğrulama jetonları (gizli anahtarlar dahil). Realtime Database gizli anahtarlarınızı şurada bulabilirsiniz: "the" Hizmet Hesapları bölümündeki talimatları uygulayın.

Gizli anahtarlar, uzun ömürlü kimlik bilgileridir. Yeni bir gizli anahtar oluşturmanızı ve gizli erişimi olan kullanıcıları kaldırırken (örneğin, sahiplerinden) çıkarmalarına yardımcı olur.