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 ยอมรับโทเค็น Firebase ID เดียวกันกับที่ SDK ของไคลเอ็นต์ใช้
โทเค็นเพื่อการเข้าถึง OAuth2 ของ Google
ข้อมูลใดก็ตามที่อ่านหรือเขียนได้แบบสาธารณะตามกฎ Realtime Database ของคุณจะอ่านและเขียนได้ผ่าน REST API โดยไม่ต้องมีการตรวจสอบสิทธิ์ด้วย อย่างไรก็ตาม หากต้องการให้เซิร์ฟเวอร์ข้ามกฎ Realtime Database คุณต้องตรวจสอบสิทธิ์คำขออ่านและเขียน การตรวจสอบสิทธิ์ผ่าน Google OAuth2 ต้องทำตามขั้นตอนต่อไปนี้
- สร้างโทเค็นเพื่อการเข้าถึง
- ตรวจสอบสิทธิ์ด้วยโทเค็นเพื่อการเข้าถึงนั้น
สร้างโทเค็นเพื่อการเข้าถึง
Realtime Database REST API ยอมรับโทเค็นเพื่อการเข้าถึง Google OAuth2 มาตรฐาน คุณสร้างโทเค็นเพื่อการเข้าถึงได้โดยใช้บัญชีบริการที่มีสิทธิ์ที่เหมาะสมใน Realtime Database การคลิกปุ่มสร้างคีย์ส่วนตัวใหม่ที่ด้านล่างของส่วนบัญชีบริการในคอนโซล Firebase จะช่วยให้คุณสร้างไฟล์คีย์บัญชีบริการใหม่ได้อย่างง่ายดายหากยังไม่มี
เมื่อมีไฟล์คีย์บัญชีบริการแล้ว คุณสามารถใช้ไลบรารีของไคลเอ็นต์ Google API เพื่อสร้างโทเค็นเพื่อการเข้าถึง Google OAuth2 ที่มีขอบเขตที่จำเป็นต่อไปนี้
https://www.googleapis.com/auth/userinfo.emailhttps://www.googleapis.com/auth/firebase.database
ตัวอย่างการติดตั้งใช้งานต่อไปนี้แสดงวิธีสร้างโทเค็นเพื่อการเข้าถึง Google OAuth2 เพื่อตรวจสอบสิทธิ์กับ Realtime Database REST API ในภาษาต่างๆ
Node.js
การใช้ไลบรารีของไคลเอ็นต์ Google 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
การใช้ไลบรารีของไคลเอ็นต์ Google 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
คำขอที่สำเร็จจะแสดงด้วยรหัสสถานะ HTTP 200 OK การตอบกลับจะมีข้อมูลที่ดึงมาดังนี้
{"first":"Ada","last":"Lovelace"}
โทเค็น Firebase ID
เมื่อผู้ใช้หรืออุปกรณ์ลงชื่อเข้าใช้ด้วย Firebase Authentication Firebase จะสร้างโทเค็นระบุตัวตนที่สอดคล้องกันซึ่งระบุตัวตนของผู้ใช้หรืออุปกรณ์นั้นๆ โดยไม่ซ้ำกัน และให้สิทธิ์เข้าถึงแหล่งข้อมูลหลายรายการ เช่น Realtime Database และ Cloud Storage คุณสามารถใช้โทเค็นระบุตัวตนนั้นซ้ำเพื่อตรวจสอบสิทธิ์ Realtime Database REST API และส่งคำขอในนามของผู้ใช้รายนั้นได้
สร้างโทเค็นระบุตัวตน
หากต้องการดึงข้อมูลโทเค็น Firebase ID จากไคลเอ็นต์ ให้ทำตามขั้นตอนในหัวข้อดึงข้อมูลโทเค็น Firebase ID ในไคลเอ็นต์
โปรดทราบว่าโทเค็นระบุตัวตนจะหมดอายุหลังจากผ่านไประยะเวลาสั้นๆ และควรใช้โดยเร็วที่สุดหลังจากดึงข้อมูลมาแล้ว
ตรวจสอบสิทธิ์ด้วยโทเค็นระบุตัวตน
หากต้องการส่งคำขอที่ตรวจสอบสิทธิ์แล้วไปยัง Realtime Database REST API ให้ส่งโทเค็นระบุตัวตนที่สร้างขึ้นด้านบนเป็นพารามิเตอร์สตริงการค้นหา auth=<ID_TOKEN> ตัวอย่างคำขอ curl เพื่ออ่านชื่อของ Ada มีดังนี้
curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?auth=<ID_TOKEN>"
อย่าลืมแทนที่ <DATABASE_NAME> ด้วยชื่อของ Realtime Database และแทนที่ <ID_TOKEN> ด้วยโทเค็น Firebase ID
คำขอที่สำเร็จจะแสดงด้วยรหัสสถานะ HTTP 200 OK การตอบกลับจะมีข้อมูลที่ดึงมาดังนี้
{"first":"Ada","last":"Lovelace"}
โทเค็นเดิม
หากคุณยังใช้โทเค็นการตรวจสอบสิทธิ์ Firebase เดิมอยู่ เราขอแนะนำให้อัปเดตการตรวจสอบสิทธิ์ REST เป็นวิธีการตรวจสอบสิทธิ์วิธีใดวิธีหนึ่งที่อธิบายไว้ข้างต้น
REST API ของ Realtime Database ยังคงรองรับการตรวจสอบสิทธิ์ผ่านโทเค็นการตรวจสอบสิทธิ์เดิม ซึ่งรวมถึงข้อมูลลับ คุณดูข้อมูลลับของ Realtime Database ได้ในส่วนบัญชีบริการของคอนโซล Firebase
ข้อมูลลับคือข้อมูลเข้าสู่ระบบที่มีอายุการใช้งานยาวนาน เราขอแนะนำให้สร้างข้อมูลลับใหม่และเพิกถอนข้อมูลลับที่มีอยู่เมื่อนำผู้ใช้ที่มีสิทธิ์เข้าถึงข้อมูลลับ (เช่น เจ้าของ) ออกจากโปรเจ็กต์