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