ตรวจสอบคำขอ REST

Firebase SDK จัดการการตรวจสอบสิทธิ์และการสื่อสารทั้งหมดกับฐานข้อมูล Firebase Realtime ในนามของคุณ อย่างไรก็ตาม เมื่อคุณอยู่ในสภาพแวดล้อมที่ไม่มี SDK ไคลเอ็นต์หรือต้องการหลีกเลี่ยงค่าใช้จ่ายในการเชื่อมต่อฐานข้อมูลถาวร คุณสามารถใช้ Realtime Database REST API เพื่ออ่านและเขียนข้อมูลได้

ตรวจสอบผู้ใช้โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้:

  1. โทเค็นการเข้าถึง Google OAuth2 - โดยทั่วไปแล้ว ความสามารถในการอ่านและเขียนไปยังฐานข้อมูลเรียลไทม์จะอยู่ภายใต้ กฎของฐานข้อมูลเรียลไทม์ แต่คุณสามารถเข้าถึงข้อมูลของคุณจากเซิร์ฟเวอร์และให้สิทธิ์การเข้าถึงข้อมูลของคุณแบบอ่านและเขียนโดยสมบูรณ์ด้วยโทเค็นการเข้าถึง Google OAuth2 ที่สร้างจากบัญชีบริการ

  2. โทเค็น Firebase ID - คุณอาจต้องการส่งคำขอที่ได้รับการตรวจสอบสิทธิ์ในฐานะผู้ใช้แต่ละราย เช่น การจำกัดการเข้าถึงด้วยกฎฐานข้อมูลเรียลไทม์บน SDK ไคลเอ็นต์ REST API ยอมรับโทเค็น Firebase ID เดียวกันกับที่ใช้โดย SDK ไคลเอ็นต์

โทเค็นการเข้าถึง Google OAuth2

ข้อมูลใดๆ ที่สามารถอ่านหรือเขียนได้แบบสาธารณะตาม กฎฐานข้อมูลเรียลไทม์ ของคุณ ก็สามารถอ่านและเขียนได้ผ่าน REST API โดยไม่ต้องมีการตรวจสอบสิทธิ์ใดๆ อย่างไรก็ตาม หากคุณต้องการให้เซิร์ฟเวอร์ของคุณข้ามกฎฐานข้อมูลเรียลไทม์ คุณจะต้องตรวจสอบสิทธิ์คำขออ่านและเขียนของคุณ การตรวจสอบสิทธิ์ผ่าน Google OAuth2 ต้องมีขั้นตอนต่อไปนี้:

  1. สร้างโทเค็นการเข้าถึง
  2. ตรวจสอบสิทธิ์ด้วยโทเค็นการเข้าถึงนั้น

สร้างโทเค็นการเข้าถึง

REST API ฐานข้อมูลเรียลไทม์ยอมรับ โทเค็นการเข้าถึง Google OAuth2 มาตรฐาน โทเค็นการเข้าถึงสามารถสร้างขึ้นได้โดยใช้บัญชีบริการที่มีสิทธิ์ที่เหมาะสมในฐานข้อมูลเรียลไทม์ของคุณ การคลิกปุ่ม สร้างคีย์ส่วนตัวใหม่ ที่ด้านล่างของส่วน บัญชีบริการ ของคอนโซล 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 ในภาษาต่างๆ:

โหนด 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.
  }
});

ชวา

การใช้ ไลบรารีไคลเอ็นต์ 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.

หลาม

การใช้ไลบรารี 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> ด้วยชื่อของฐานข้อมูลเรียลไทม์ของคุณและ <ACCESS_TOKEN> ด้วยโทเค็นการเข้าถึง Google OAuth2

คำขอที่สำเร็จจะถูกระบุด้วยรหัสสถานะ HTTP 200 OK การตอบสนองประกอบด้วยข้อมูลที่กำลังดึงข้อมูล:

{"first":"Ada","last":"Lovelace"}

โทเค็นรหัส Firebase

เมื่อผู้ใช้หรืออุปกรณ์ลงชื่อเข้าใช้โดยใช้ Firebase Authentication Firebase จะสร้างโทเค็น ID ที่เกี่ยวข้องซึ่งระบุตัวตนได้โดยไม่ซ้ำกัน และให้สิทธิ์ในการเข้าถึงทรัพยากรต่างๆ เช่น Realtime Database และ Cloud Storage คุณสามารถใช้โทเค็น ID นั้นซ้ำเพื่อตรวจสอบสิทธิ์ Realtime Database REST API และส่งคำขอในนามของผู้ใช้นั้นได้

สร้างโทเค็น ID

หากต้องการดึงโทเค็น Firebase ID จากไคลเอนต์ ให้ทำตามขั้นตอนใน ดึงโทเค็น ID บนไคลเอนต์

โปรดทราบว่าโทเค็น ID จะหมดอายุหลังจากช่วงระยะเวลาสั้นๆ และควรใช้ให้เร็วที่สุดหลังจากเรียกคืนมา

ตรวจสอบสิทธิ์ด้วยโทเค็น ID

หากต้องการส่งคำขอที่ได้รับการตรวจสอบสิทธิ์ไปยัง Realtime Database REST API ให้ส่งโทเค็น ID ที่สร้างขึ้นด้านบนเป็นพารามิเตอร์สตริงการสืบค้น auth=<ID_TOKEN> นี่คือตัวอย่างคำขอ curl เพื่ออ่านชื่อของ Ada:

curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?auth=<ID_TOKEN>"

ตรวจสอบให้แน่ใจว่าได้แทนที่ <DATABASE_NAME> ด้วยชื่อของฐานข้อมูลเรียลไทม์ของคุณและ <ID_TOKEN> ด้วยโทเค็น Firebase ID

คำขอที่สำเร็จจะถูกระบุด้วยรหัสสถานะ HTTP 200 OK การตอบสนองประกอบด้วยข้อมูลที่กำลังดึงข้อมูล:

{"first":"Ada","last":"Lovelace"}

โทเค็นแบบเดิม

หากคุณยังคงใช้โทเค็นการตรวจสอบสิทธิ์ Firebase เดิม เราขอแนะนำให้อัปเดตการตรวจสอบสิทธิ์ REST ของคุณเป็นวิธีการตรวจสอบสิทธิ์วิธีใดวิธีหนึ่งที่อธิบายไว้ข้างต้น

REST API ฐานข้อมูลแบบเรียลไทม์ยังคงรองรับการตรวจสอบสิทธิ์ผ่านโทเค็นการตรวจสอบสิทธิ์แบบเดิม รวมถึง ข้อมูลลับ ด้วย ข้อมูลลับฐานข้อมูลเรียลไทม์ของคุณสามารถพบได้ในส่วน บัญชีบริการ ของคอนโซล Firebase

ความลับเป็นข้อมูลรับรองที่มีอายุยืนยาว เราขอแนะนำให้สร้างข้อมูลลับใหม่และเพิกถอนข้อมูลที่มีอยู่เมื่อลบผู้ใช้ที่มีสิทธิ์เข้าถึงข้อมูลลับ (เช่น เจ้าของ) ออกจากโครงการ