Tìm hiểu về cách sử dụng và quản lý khoá API cho Firebase
Khoá API là một chuỗi duy nhất dùng để định tuyến các yêu cầu đến Firebase
dự án khi tương tác với Firebase và các dịch vụ của Google. Trang này mô tả thông tin cơ bản về khoá API cũng như các phương pháp hay nhất để sử dụng và quản lý khoá API bằng ứng dụng Firebase.
Thông tin chung về khoá API và Firebase
Khoá API cho Firebase khác với khoá API thông thường
Không giống như cách khoá API thường được sử dụng, khoá API cho các dịch vụ của Firebase
không dùng để kiểm soát quyền truy cập vào các tài nguyên phụ trợ; chỉ có thể làm được
với Firebase Security Rules (để kiểm soát người dùng cuối nào có thể truy cập vào tài nguyên) và
Firebase App Check (để kiểm soát những ứng dụng có thể truy cập vào tài nguyên).
Thông thường, bạn cần bảo vệ cẩn thận các khoá API (ví dụ: bằng cách sử dụng dịch vụ kho tiền hoặc đặt khoá làm biến môi trường); tuy nhiên, bạn có thể đưa khoá API cho các dịch vụ Firebase vào mã hoặc tệp cấu hình đã kiểm tra.
Bạn cũng có thể tìm thấy khoá API nào được tự động so khớp với một Ứng dụng Firebase ở những nơi sau. Theo mặc định, tất cả Ứng dụng Firebase của dự án cho cùng một nền tảng (Apple so với Android so với Web) sẽ sử dụng cùng một khoá API.
Ứng dụng Apple trên Firebase – Tìm khoá API được so khớp tự động trong tệp cấu hình Firebase, GoogleService-Info.plist, trong trường API_KEY.
Ứng dụng Android Firebase – Tìm khoá API được so khớp tự động trong
tệp cấu hình Firebase, google-services.json, trong trường
current_key.
Ứng dụng web của Firebase — Tìm khoá API được tự động so khớp trong Firebase
config, trong trường apiKey.
Sử dụng khoá API
Khoá API được dùng để xác định dự án Firebase của bạn khi tương tác với các dịch vụ của Firebase/Google. Cụ thể, các mã này được dùng để liên kết các yêu cầu API với dự án của bạn để tính hạn mức và thanh toán. Chúng cũng hữu ích khi truy cập vào
dữ liệu công khai.
Ví dụ: bạn có thể sử dụng khoá API một cách rõ ràng bằng cách chuyển giá trị của khoá đó vào một REST
Lệnh gọi API dưới dạng tham số truy vấn. Ví dụ này cho thấy cách bạn có thể gửi yêu cầu đến API rút gọn đường liên kết Dynamic Links:
POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY
Khi ứng dụng của bạn thực hiện lệnh gọi đến Firebase API và yêu cầu phải cung cấp khoá API
bằng ứng dụng web dành cho thiết bị di động/web, ứng dụng của bạn sẽ tự động tìm trong
Tệp/đối tượng cấu hình Firebase cho khoá API của dự án. Tuy nhiên, bạn có thể cung cấp khoá API cho ứng dụng bằng một cơ chế khác, bao gồm cả biến môi trường.
Xem xét và áp dụng các quy tắc hạn chế thích hợp cho khoá API (nên áp dụng)
Mặc dù không cần phải coi khoá API cho các dịch vụ Firebase là khoá bí mật, nhưng bạn nên xem xét và áp dụng các quy định hạn chế và giới hạn như mô tả trong phần này.
Xem xét những API được tự động thêm vào danh sách cho phép cho khoá API Firebase của bạn
Khi Firebase tạo khoá API trong dự án của bạn, chúng tôi sẽ tự động thêm
"Hạn chế về API"
cho khoá đó. Các API được thêm vào danh sách cho phép này là các API liên quan đến Firebase yêu cầu ứng dụng cung cấp khoá API cùng với lệnh gọi. Xin lưu ý rằng hầu hết
Để sử dụng các dịch vụ của Firebase, bạn không cần phải ở trên
danh sách cho phép cho các khoá API của bạn.
Vì Firebase thêm các API cần thiết cho tất cả dịch vụ Firebase, nên
danh sách cho phép của khoá API có thể bao gồm API của các sản phẩm mà bạn không sử dụng.
Bạn có thể loại bỏ API khỏi danh sách cho phép, nhưng phải cẩn thận để không
xoá các API cần thiết cho Firebase và dịch vụ Firebase mà bạn sử dụng
(xem
danh sách các API liên quan đến Firebase
cần có trong danh sách cho phép của từng dịch vụ / sản phẩm). Nếu không, bạn
sẽ gặp lỗi khi thực hiện lệnh gọi đến dịch vụ Firebase.
Siết chặt hạn mức nếu bạn sử dụng Authentication dựa trên mật khẩu
Nếu bạn sử dụng Firebase Authentication dựa trên mật khẩu và có người lấy được API của bạn
khoá, thì họ sẽ không thể truy cập vào bất kỳ cơ sở dữ liệu nào của dự án Firebase
hoặc Cloud Storagemiễn là dữ liệu này được bảo vệ bằng
Firebase Security Rules. Tuy nhiên, họ có thể sử dụng khoá API của bạn để truy cập vào các điểm cuối xác thực của Firebase và đưa ra yêu cầu xác thực đối với dự án của bạn.
Để giảm thiểu khả năng một người nào đó có thể sử dụng khoá API sai mục đích để
nếu bạn thực hiện một cuộc tấn công brute force, bạn có thể thắt chặt hạn mức mặc định của
identitytoolkit.googleapis.com điểm cuối để phản ánh lưu lượng truy cập bình thường
kỳ vọng của ứng dụng. Xin lưu ý rằng nếu bạn thắt chặt hạn mức này và ứng dụng của bạn
bất ngờ có được người dùng, bạn có thể gặp lỗi đăng nhập cho đến khi bạn tăng hạn mức.
Bạn có thể thay đổi hạn mức API của dự án trong
Bảng điều khiển Google Cloud.
Sử dụng các khoá API riêng biệt và bị hạn chế cho mọi dịch vụ không phải của Firebase
Mặc dù bạn thường không cần phải xử lý khoá API dùng cho các dịch vụ của Firebase
là bí mật, bạn nên thực hiện thêm một số biện pháp phòng ngừa với khoá API mà bạn sử dụng
với các API Google Cloud khác.
Trường hợp bạn sử dụng API Google Cloud (trên bất kỳ nền tảng nào) không dành cho Firebase
dịch vụ / sản phẩm, bạn nên tạo các khoá API riêng biệt và bị hạn chế
để sử dụng với các API đó. Điều này đặc biệt quan trọng nếu API dành cho một dịch vụ Google Cloud có thể lập hoá đơn.
Ví dụ: nếu sử dụng Firebase ML và các API Cloud Vision trên iOS, bạn nên tạo các khoá API riêng biệt mà bạn chỉ sử dụng để truy cập vào các API Cloud Vision.
Bằng cách sử dụng các khoá API riêng biệt và bị hạn chế cho các API không phải Firebase, bạn có thể xoay vòng hoặc
thay thế khoá khi cần và thêm các quy tắc hạn chế bổ sung vào API
khoá
mà không làm gián đoạn việc bạn sử dụng dịch vụ Firebase.
Xem hướng dẫn tạo khoá dành riêng cho API
Những hướng dẫn này mô tả cách tạo khoá API riêng biệt và bị hạn chế cho
API giả có tên là Super Service API.
Bước 1: Định cấu hình các khoá API hiện có để không cho phép truy cập vào Super Service API
Mở phần Thông tin xác thực
trang của bảng điều khiển Google Cloud. Khi được nhắc, hãy chọn dự án của bạn.
Đối với mỗi khoá API hiện có trong danh sách, hãy mở chế độ xem chỉnh sửa.
Trong phần API Restrictions (Hạn chế về API), hãy chọn Restrict key (Hạn chế khoá), sau đó thêm vào
liệt kê tất cả API mà bạn muốn khoá API có quyền truy cập. Đảm bảo
để không thêm API mà bạn sẽ tạo khoá API riêng
(trong ví dụ này là Super Service API).
Khi định cấu hình các quy tắc hạn chế đối với API của khoá API, bạn đang khai báo rõ ràng các API mà khoá có quyền truy cập. Theo mặc định, khi
Phần Các hạn chế về API có tuỳ chọn Không hạn chế khoá được chọn, một khoá API
có thể dùng để truy cập vào bất kỳ API nào được bật cho dự án.
Giờ đây, các khoá API hiện có của bạn sẽ không cấp quyền truy cập vào Super Service API, nhưng mỗi khoá sẽ tiếp tục hoạt động cho mọi API mà bạn đã thêm vào danh sách các quy tắc hạn chế đối với API.
Bước 2: Tạo và sử dụng khoá API mới để truy cập vào Super Service API
Quay lại trang Thông tin xác thực. Hãy đảm bảo dự án Firebase của bạn vẫn đang được chọn.
Nhấp vào Tạo thông tin xác thực > Khoá API. Ghi lại khoá API mới, sau đó
nhấp vào Hạn chế khoá.
Trong phần API restrictions (Hạn chế cho API), hãy chọn Restrict key (Hạn chế khoá), sau đó thêm Super Service API vào danh sách chỉ.
Khoá API mới này chỉ cấp quyền truy cập vào Super Service API.
Định cấu hình ứng dụng và dịch vụ để sử dụng khoá API mới.
Sử dụng khoá API dành riêng cho môi trường (nên dùng)
Nếu bạn thiết lập các dự án Firebase khác nhau cho các môi trường khác nhau, chẳng hạn như
thử nghiệm và chính thức, điều quan trọng là mỗi phiên bản ứng dụng phải tương tác với
dự án Firebase tương ứng. Ví dụ: phiên bản ứng dụng thử nghiệm của bạn không bao giờ được giao tiếp với dự án Firebase chính thức. Điều này cũng có nghĩa là
ứng dụng chạy thử cần sử dụng các khoá API được liên kết với dự án Firebase thử nghiệm của bạn.
Để giảm thiểu các vấn đề khi quảng bá các thay đổi về mã từ phát triển đến giai đoạn thử nghiệm đến phát hành công khai, thay vì đưa khoá API vào chính mã, hãy đặt khoá API làm biến môi trường hoặc đưa vào tệp cấu hình.
Xin lưu ý rằng nếu đang sử dụng Firebase Local Emulator Suite để phát triển cùng với Firebase ML, bạn phải tạo và sử dụng khoá API chỉ gỡ lỗi. Bạn có thể tìm thấy hướng dẫn tạo loại khoá đó trong tài liệu về Firebase ML.
Câu hỏi thường gặp và cách khắc phục sự cố
Câu hỏi thường gặp
Là khoá API
cho các dịch vụ Firebase bị hạn chế theo mặc định không?
Có, theo mặc định, tất cả khoá API mà Firebase tự động cấp để sử dụng với các API liên quan đến Firebase đều được tự động áp dụng "Hạn chế API". Xem danh sách các API liên quan đến Firebase có trong danh sách cho phép này.
Các API được thêm vào danh sách cho phép này là những API được các dịch vụ Firebase gọi từ
mã ứng dụng khách và yêu cầu khoá API để nhận dạng dự án Firebase hoặc
. Lưu ý rằng hầu hết API cần thiết để sử dụng các dịch vụ Firebase thường không thực sự
cần có tên trong danh sách cho phép cho các khoá API của bạn.
Vì Firebase thêm các API cần thiết cho tất cả dịch vụ Firebase, nên danh sách cho phép của khoá API có thể bao gồm các API cho các sản phẩm mà bạn không sử dụng. Bạn
có thể xoá API khỏi danh sách cho phép, nhưng bạn phải cẩn thận để không xoá
các API bắt buộc cho Firebase và dịch vụ Firebase mà bạn sử dụng (xem
danh sách các API liên quan đến Firebase
cần có trong danh sách cho phép của từng dịch vụ / sản phẩm). Nếu không, bạn
sẽ gặp lỗi khi thực hiện lệnh gọi đến dịch vụ Firebase.
Bạn có thể xem tất cả khoá API và "các quy định hạn chế về API" của các khoá đó trong bảng điều khiển API và Dịch vụ > Thông tin xác thực trong bảng điều khiển Google Cloud.
Xin lưu ý những điều sau đây về cách Firebase áp dụng "các quy tắc hạn chế về API" này:
Vào tháng 5 năm 2024, tất cả các khoá API hiện có và không bị hạn chế mà Firebase từng tự động cấp trước đó sẽ bị hạn chế ở danh sách các API liên quan đến Firebasecộng với mọi API hiện đang được bật của dự án.
Mọi khoá API hiện có và đã bị hạn chế mà Firebase từng tự động cấp trước đó sẽ không thay đổi.
Mọi khoá API hiện có không được Firebase tự động cấp phép đều không
đã thay đổi.
Làm cách nào để xác định khoá API nào được liên kết với Ứng dụng Firebase của tôi?
Bạn có thể sử dụng bất kỳ tuỳ chọn nào sau đây để xác định khoá API nào được liên kết với Ứng dụng Firebase của bạn:
Bảng điều khiển Firebase
Chuyển đến settingsCài đặt dự án,
sau đó cuộn xuống thẻ Ứng dụng của bạn.
Chọn ứng dụng bạn quan tâm.
Lấy tệp/đối tượng cấu hình Firebase cho ứng dụng mà bạn quan tâm, sau đó tìm khoá API của ứng dụng đó:
Apple: Tải GoogleService-Info.plist xuống rồi tìm
Trường API_KEY
Android: Tải google-services.json xuống, tìm cấu hình cho
ứng dụng bạn quan tâm (tìm tên gói), sau đó tìm
Trường current_key
Web: Chọn mục Cấu hình, sau đó tìm trường apiKey
Firebase CLI
Lấy tệp/đối tượng cấu hình Firebase cho ứng dụng bạn quan tâm bằng cách chạy
lệnh sau:
firebase apps:sdkconfig PLATFORMFIREBASE_APP_ID
PLATFORM (một trong các): IOS | ANDROID | WEB
FIREBASE_APP_ID: giá trị nhận dạng riêng biệt do Firebase chỉ định cho
Ứng dụng Firebase (tìm Mã ứng dụng của bạn)
Trong cấu hình Firebase được in của ứng dụng, hãy tìm khoá API của ứng dụng:
Apple: Tìm trường API_KEY
Android: Tìm cấu hình cho ứng dụng mà bạn quan tâm (tìm tên gói của ứng dụng đó), sau đó tìm trường current_key
Web: Tìm trường apiKey
API REST
Lấy apiKeyId (UID) của khoá API bằng cách gọi điểm cuối có thể áp dụng cho ứng dụng mà bạn quan tâm, sau đó truyền giá trị apiKeyId đến bước tiếp theo.
keyString này là cùng một giá trị có thể được tìm thấy trong
cấu phần phần mềm cấu hình
(Táo |
Android |
Web).
Tôi có thể liệt kê hai khoá API cho cùng một Ứng dụng Firebase trong tệp/đối tượng cấu hình Firebase không?
Ứng dụng Apple của Firebase — Mỗi ứng dụng có tệp cấu hình riêng và chỉ có thể có
một khoá API được liệt kê.
Ứng dụng Android trên Firebase – Tất cả ứng dụng Android trong dự án Firebase đều được liệt kê trong cùng một tệp cấu hình và mỗi ứng dụng chỉ có thể có một khoá API được liệt kê. Mỗi ứng dụng trong tệp cấu hình này có thể có một khoá khác nhau được liệt kê,
nhưng.
Ứng dụng web Firebase – Mỗi ứng dụng có một đối tượng cấu hình riêng và chỉ có thể có một khoá API được liệt kê.
Tuy nhiên, bạn có thể sử dụng nhiều khoá API với một ứng dụng. Bạn phải cung cấp một cơ chế để ứng dụng của bạn truy cập vào các khoá API khác này, chẳng hạn như thông qua một biến môi trường. Cơ chế truy cập vào các khoá API khác không thể phụ thuộc vào các khoá đó
Khoá API được liệt kê trong tệp/đối tượng cấu hình Firebase của bạn.
Làm cách nào để Firebase biết khoá API nào sẽ khớp với một ứng dụng (chẳng hạn như trong tệp/đối tượng cấu hình Firebase)?
Nếu không tìm thấy khoá bị hạn chế nào khớp, Firebase sẽ liệt kê trong tệp/đối tượng cấu hình iOS key cho ứng dụng Apple, Android key cho ứng dụng Android và Browser key cho ứng dụng web (giả sử các khoá này tồn tại và không có "Hạn chế ứng dụng" nào khiến các khoá này không khớp với ứng dụng đó).
Tôi có thể xoá khoá API và trường theo cách thủ công khỏi tệp/đối tượng cấu hình Firebase không?
Có, bạn có thể xoá khoá API khỏi tệp/đối tượng cấu hình theo cách thủ công. Tuy nhiên, bạn phải cung cấp một số cơ chế khác để ứng dụng của bạn truy cập vào khoá API (chẳng hạn như thông qua biến môi trường). Nếu không, mọi lệnh gọi đến dịch vụ Firebase đều sẽ không thực hiện được.
Tôi có thể làm theo cách thủ công không
chỉnh sửa tệp/đối tượng cấu hình Firebase của tôi bằng các khoá API khác nhau?
Có, bạn có thể chỉnh sửa tệp/đối tượng cấu hình theo cách thủ công để liên kết một khoá API khác với một ứng dụng.
Tôi có thể di chuyển một
Khoá API khi chuyển từ dự án Firebase này sang dự án khác?
Không, khoá API chỉ xác định một dự án cụ thể và không thể chuyển sang một dự án khác
dự án.
Điều gì sẽ xảy ra nếu tôi
xoá khoá API được liệt kê trong bảng điều khiển Google Cloud?
Nếu bạn xoá khoá API mà một ứng dụng đang dùng thì các lệnh gọi API từ ứng dụng đó
sẽ không thành công. Bạn có thể nhận được báo cáo, email hoặc lỗi mà bạn đang cố gắng sử dụng
khoá API không hợp lệ.
Thao tác xoá khoá API là vĩnh viễn và không thể huỷ được.
Bạn bắt buộc phải thêm API nào vào danh sách cho phép "Hạn chế API" cho khoá API Firebase?
Đối với khoá API Firebase, bạn chỉ cần đặt các API trên
"Hạn chế về API" danh sách cho phép là các API yêu cầu ứng dụng cung cấp
Khoá API cùng với lệnh gọi. Lưu ý rằng rất ít API liên quan đến Firebase có tính năng này
. Hầu hết các API liên quan đến Firebase được bật trong dự án của bạn không cần phải nằm trong danh sách cho phép "Hạn chế API" của khoá.
Sử dụng bảng sau đây để xác định những API liên quan đến Firebase
có trong phần "Hạn chế về API" danh sách cho phép dùng khoá API Firebase. Hãy nhớ rằng bạn chỉ nên sử dụng khoá API Firebase cho các dịch vụ Firebase. Tìm hiểu thêm về
đang tạo
khoá API riêng biệt, bị hạn chế cho các loại API cụ thể.
Cloud Messaging, Crashlytics, In-App MessagingPerformance Monitoring, Remote Config, Firebase ML
firebaseappcheck.googleapis.com
API Kiểm tra ứng dụng Firebase
App Check
firebaseappdistribution.googleapis.com
API Phân phối ứng dụng Firebase
App Distribution
firebaseapptesters.googleapis.com
API Người kiểm thử ứng dụng Firebase
App Distribution
identitytoolkit.googleapis.com
API Identity Toolkit
Authentication
securetoken.googleapis.com
API dịch vụ mã thông báo
Authentication
firebaserules.googleapis.com *
API quy tắc Firebase
Cloud Firestore, Cloud Storage, Realtime Database
datastore.googleapis.com
Cloud Datastore API
Cloud Firestore
firestore.googleapis.com
API Google Cloud Firestore
Cloud Firestore
fcmregistrations.googleapis.com
API đăng ký FCM
Cloud Messaging
firebasestorage.googleapis.com
API Bộ nhớ trên đám mây cho Firebase
Cloud Storage
firebasedynamiclinks.googleapis.com
API liên kết động của Firebase
Dynamic Links
firebasehosting.googleapis.com *
API Lưu trữ Firebase
Hosting
firebaseinappmessaging.googleapis.com
API tính năng gửi thông báo trong ứng dụng của Firebase
In-App Messaging
firebaseml.googleapis.com
API Firebase ML
Firebase ML
mlkit.googleapis.com **
API Bộ công cụ học máy
Firebase ML
mobilecrashreporting.googleapis.com
Mobile Crash Reporting API
Performance Monitoring
play.googleapis.com
Google Play Android Developer API
Performance Monitoring
firebaseremoteconfig.googleapis.com
API Cấu hình từ xa Firebase
Performance Monitoring, Remote Config
firebaseremoteconfigrealtime.googleapis.com
API theo thời gian thực của Cấu hình từ xa Firebase
Performance Monitoring, Remote Config
cloudconfig.googleapis.com **
Không áp dụng
Remote Config
firebasedatabase.googleapis.com *
API cơ sở dữ liệu theo thời gian thực của Firebase
Realtime Database
firebasevertexai.googleapis.com
Vertex AI trong API Firebase
Vertex AI in Firebase
* Chỉ bắt buộc nếu bạn đang sử dụng khoá API Firebase với các công cụ bên thứ ba hoặc quyền truy cập REST trực tiếp vào dịch vụ/sản phẩm Firebase.
** Bắt buộc đối với các phiên bản SDK cũ của sản phẩm. Nếu bạn đang sử dụng
phiên bản SDK mới nhất, API không cần phải nằm trên khoá
danh sách cho phép.
Khắc phục sự cố
Làm thế nào để
khắc phục lỗi API_KEY_SERVICE_BLOCKED hoặc lỗi
Cấm 403 có nội dung
các yêu cầu đến API này có bị chặn không?
Hãy làm theo hướng dẫn trong phần Câu hỏi thường gặp này nếu bạn gặp lỗi API_KEY_SERVICE_BLOCKED hoặc lỗi có dạng như sau:
Forbidden: 403 POST https://example-service.googleapis.com/method: Requests to this API example-service.googleapis.com method google.example-service.rest.method are blocked.
Khoá API mà ứng dụng của bạn dùng để gọi API có thể có
"Các quy định hạn chế về API"
đã áp dụng cho khoá đó, đồng thời danh sách cho phép của khoá không bao gồm API đó.
Nếu bạn gặp lỗi này khi cố gắng sử dụng một dịch vụ không phải Firebase, hãy
bạn nên tạo khoá API mới dành riêng cho dịch vụ đó và
API. Bạn chỉ nên sử dụng khoá API Firebase cho các dịch vụ/sản phẩm của Firebase.
Tìm hiểu thêm về cách tạo các khoá API riêng biệt, bị hạn chế cho các loại API cụ thể.
Làm thế nào để
sửa lỗi này? "Không tìm nạp được mã đo lường của ứng dụng Firebase này từ máy chủ."
Khoá API mà ứng dụng web của bạn sử dụng có thể đã áp dụng "Hạn chế API". Nếu đúng như vậy, hãy đảm bảo rằng API Quản lý Firebase
nằm trong danh sách API được phép.
Tôi nhận được email hoặc lỗi cho biết khoá API của tôi không hợp lệ. Điều gì đã xảy ra và làm cách nào để khắc phục vấn đề này?
Dưới đây là một số nguyên nhân thường gặp nhất khiến khoá API không hợp lệ:
Khoá API có
"Các hạn chế về khoá API"
đã áp dụng cho khoá đó, khiến không thể khớp với ứng dụng cố gắng dùng khoá
("Hạn chế của ứng dụng") hoặc không sử dụng được cho API được gọi ("API
Quy định hạn chế").
Khoá API đã bị xoá khỏi dự án trong bảng điều khiển Google Cloud.
Khoá API chưa được tạo cho Mã dự án được liệt kê trong
Đối tượng/tệp cấu hình Firebase.
Một cách để khắc phục vấn đề này là tải phiên bản cập nhật của tệp/đối tượng cấu hình Firebase của ứng dụng, sau đó thay thế tệp/đối tượng cấu hình cũ bằng tệp/đối tượng mới được cập nhật.
Trước khi gửi tệp cấu hình để tải xuống hoặc hiển thị đối tượng cấu hình trong
bảng điều khiển, Firebase sẽ kiểm tra để đảm bảo rằng(các) khoá API được liệt kê
với(các) ứng dụng.