Firebase SDK 會處理與 已代您Firebase Realtime Database。不過,如果您在 不具有用戶端 SDK 的環境,或是不為了讓 建立永久資料庫連線 用於讀取及寫入資料的 Realtime Database REST API。
請透過下列其中一種方法驗證使用者:
Google OAuth2 存取權杖 - 可以讀取及讀取 寫入 Realtime Database 會受到 Realtime Database規則。不過,您可以將自己的資料 並授予該伺服器對 並透過 Google OAuth2 存取權杖取得資料。
Firebase ID 符記:您也可以傳送已驗證的要求 以個別使用者的身分存取資料,例如使用 Realtime Database 規則限制 用戶端 SDK。REST API 會接受 用戶端 SDK。
Google OAuth2 存取權杖
可依照您的 「Realtime Database 規則」亦可供讀取及寫入 取得任何驗證資訊不過,如果您想讓伺服器 如要略過 Realtime Database 規則,您必須驗證讀取和寫入作業 要求。透過 Google OAuth2 進行驗證需要執行以下步驟:
- 產生存取權杖。
- 驗證該存取權杖。
產生存取權杖
Realtime Database REST API 接受 標準 Google OAuth2 存取權杖。 您可使用適當的服務帳戶產生存取權杖 授予 Realtime Database 的權限。按一下「產生新的私人訊息」 畫面底部的鑰匙按鈕 服務帳戶 Firebase控制台的某個部分 可讓您輕鬆產生新的 Service 。
取得服務帳戶金鑰檔案後,您可以使用 Google API 用戶端程式庫 產生具備下列必要範圍的 Google OAuth2 存取權杖:
https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/firebase.database
以下提供幾個執行 Google OAuth2 建立方式的範例。 用來向 Realtime Database REST API 進行驗證的存取權杖 多個語言
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
// 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
程式庫:
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
使用存取權杖驗證
如要將已驗證要求傳送至 Realtime Database REST API,請將
上方產生的 Google OAuth2 存取權杖
Authorization: Bearer <ACCESS_TOKEN>
標頭或
access_token=<ACCESS_TOKEN>
查詢字串參數。以下是 curl
的範例
要求讀取 Ada 的名稱:
curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?access_token=<ACCESS_TOKEN>"
請務必將 <DATABASE_NAME>
換成
Realtime Database 和 <ACCESS_TOKEN>
,以及 Google OAuth2 存取權杖。
要求成功後,會以 200 OK
HTTP 狀態碼表示。
回應包含所擷取的資料:
{"first":"Ada","last":"Lovelace"}
Firebase ID 權杖
當使用者或裝置使用 Firebase Authentication 登入時,Firebase 會建立一個 可明確識別及授予使用者 多項資源,例如 Realtime Database 和 Cloud Storage您可以重複使用 用來驗證 Realtime Database REST API 並向其提出要求的 ID 權杖 。
產生 ID 權杖
如要從用戶端擷取 Firebase ID 符記,請按照下列步驟操作: 擷取用戶端上的 ID 權杖。
請注意,ID 符記會在短時間內失效,因此應使用 擷取。
使用 ID 權杖進行驗證
如要將已驗證要求傳送至 Realtime Database REST API,請將
在上方產生的 ID 符記,做為 auth=<ID_TOKEN>
查詢字串參數。這裡
是讀取 Ada 名稱的 curl
請求範例:
curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?auth=<ID_TOKEN>"
請務必將 <DATABASE_NAME>
換成
使用 Firebase ID 權杖的 Realtime Database 和 <ID_TOKEN>
。
要求成功後,會以 200 OK
HTTP 狀態碼表示。
回應包含所擷取的資料:
{"first":"Ada","last":"Lovelace"}
舊版權杖
如果您目前仍使用舊版 Firebase 驗證權杖,建議您 將您的 REST 驗證更新為描述的其中一種驗證方法 。
Realtime Database REST API 仍支援透過舊版驗證 驗證權杖,包括密鑰。 您可以在以下位置找到 Realtime Database 組密鑰: 這個 服務帳戶 部分Firebase。
密鑰是長期憑證。建議您產生新的密鑰 移除具有密鑰存取權的使用者時,撤銷現有的帳戶 (例如 擁有者) 規則