ตรวจสอบสิทธิ์คำขอ REST

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

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

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

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

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

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

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

สร้างโทเค็นเพื่อการเข้าถึง

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> กับโทเค็นเพื่อการเข้าถึง OAuth2 ของ Google

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

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

โทเค็นรหัส Firebase

เมื่อผู้ใช้หรืออุปกรณ์ลงชื่อเข้าใช้ด้วยการตรวจสอบสิทธิ์ Firebase 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

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