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