REST İsteklerinin Kimliğini Doğrulama

Firebase SDK'ları Sizin adınıza Firebase Realtime Database. 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 için yazma şuna tabidir: Realtime Database 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 (örneğin, Yönetici Konsolu'nda Realtime Database kurallarıyla erişimi 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 Realtime Database Kuralları da okunabilir ve yazılabilir hiçbir kimlik doğrulama yapmadan REST API üzerinden iletişim kurabilirsiniz. Ancak, sunucunuzun Realtime Database Kurallarınızı atlamak için okuma ve yazma ayarlarınızı doğrulamanız gerekir kabul edersiniz. Google OAuth2 aracılığıyla kimlik doğrulama için aşağıdaki 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 kabul eder standart Google OAuth2 erişim jetonları. Erişim jetonları, doğru erişim iznine sahip bir hizmet hesabı kullanılarak oluşturulabilir. Realtime Database izinleri. Yeni Gizli Öğe Oluştur Anahtar düğmesi altındaki Hizmet Hesapları Firebase konsolundaki 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

Kimliği doğrulanmış istekleri Realtime Database REST API'ye 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 bu kimlik jetonunu 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

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

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

<DATABASE_NAME> yerine Firebase kimlik jetonuyla 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 gizli anahtarlar dahil kimlik doğrulama jetonları. Realtime Database gizli anahtarınızı şuradan bulabilirsiniz: "the" Hizmet Hesapları bölümünde (Firebase) görebilirsiniz.

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.