Firebase SDK'ları, Firebase Realtime Database ile tüm kimlik doğrulama ve iletişimi sizin adınıza gerçekleştirir. Ancak, istemci SDK'sının olmadığı bir ortamdaysanız veya kalıcı bir veritabanı bağlantısının ek yükünden kaçınmak istiyorsanız veri okuma ve yazma işlemleri için Realtime Database REST API'yi kullanabilirsiniz.
Kullanıcıların kimliğini aşağıdaki yöntemlerden biriyle doğrulayın:
Google OAuth2 erişim jetonları: Genellikle Realtime Database'dan okuma ve Realtime Database'a yazma özelliği Realtime Database kuralları tarafından yönetilir. Ancak, verilerinize bir sunucudan erişebilir ve hizmet hesabından oluşturulan bir Google OAuth2 erişim jetonuyla bu sunucuya verileriniz için tam okuma ve yazma erişimi verebilirsiniz.
Firebase kimlik jetonları: İsteğin kimliğini tek bir kullanıcı olarak doğrulayabilir, örneğin istemci SDK'larındaki Realtime Database kurallarla erişimi sınırlayabilirsiniz. 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 okunabilir veya yazılabilir tüm veriler, kimlik doğrulama olmadan REST API üzerinden de 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ğrulama için aşağıdaki adımlar gereklidir:
- Erişim jetonu oluşturun.
- Bu erişim jetonuyla kimliğinizi doğrulayın.
Erişim jetonu oluşturma
Realtime Database REST API'si, standart Google OAuth2 erişim jetonlarını kabul eder. Erişim jetonları, Realtime Database için uygun izinlere sahip bir hizmet hesabı kullanılarak oluşturulabilir. Firebase konsolunun Hizmet Hesapları bölümünün alt kısmındaki Yeni Özel Anahtar Oluştur düğmesini tıklayarak, henüz bir hizmet hesabı anahtar dosyanız yoksa kolayca yeni bir hizmet hesabı anahtar dosyası oluşturabilirsiniz.
Hizmet hesabı anahtar dosyanız olduğunda, aşağıdaki gerekli kapsamlarla 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
Aşağıda, ç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 verilmiştir:
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.
Python
google-auth
kitaplığını 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 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 Realtime Database üstbilgisi veya access_token=<ACCESS_TOKEN>
sorgu dizesi parametresi olarak iletin.Authorization: Bearer <ACCESS_TOKEN>
Ada'nın adını okuma isteğiyle ilgili bir örneği curl
aşağıda bulabilirsiniz:
curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?access_token=<ACCESS_TOKEN>"
<DATABASE_NAME>
kısmını Realtime Database adıyla, <ACCESS_TOKEN>
kısmını ise bir Google OAuth2 erişim jetonuyla değiştirdiğinizden emin olun.
Başarılı bir istek, 200 OK
HTTP durum koduyla belirtilir. 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ı veya cihazı benzersiz şekilde tanımlayan ve Realtime Database ile Cloud Storage gibi çeşitli kaynaklara erişim izni veren bir kimlik jetonu oluşturur. Realtime Database REST API'nin kimliğini doğrulamak ve bu kullanıcı adına istekte bulunmak için bu kimlik jetonunu yeniden kullanabilirsiniz.
Kimlik jetonu oluşturma
Firebase kimlik jetonunu istemciden almak için İstemcilerde kimlik jetonlarını alma bölümündeki adımları uygulayın.
Kimlik jetonlarının kısa bir süre sonra geçerliliğini yitirdiğini ve alındıktan sonra mümkün olduğunca hızlı bir şekilde kullanılması gerektiğini 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 curl
istek örneğini aşağıda bulabilirsiniz:
curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?auth=<ID_TOKEN>"
<DATABASE_NAME>
yerine Realtime Database adını, <ID_TOKEN>
yerine ise bir Firebase kimlik jetonunu yazdığınızdan emin olun.
Başarılı bir istek, 200 OK
HTTP durum koduyla belirtilir. 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 REST kimlik doğrulamanızı yukarıda açıklanan kimlik doğrulama yöntemlerinden biriyle 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 sırları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ı (ör. sahipler) bir projeden kaldırırken yeni bir gizli adres oluşturmanızı ve mevcut olanı iptal etmenizi öneririz.