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