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