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 dự án Firebase của bạ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 sử dụng khoá API thông thường, khoá API cho các dịch vụ Firebase không được dùng để kiểm soát quyền truy cập vào tài nguyên phụ trợ; bạn chỉ có thể thực hiện việc này bằng 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 ứng dụng nào 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.

Mặc dù bạn có thể an toàn khi đưa khoá API cho các dịch vụ Firebase vào mã, nhưng bạn nên xem xét và áp dụng các quy tắc hạn chế và giới hạn thích hợp cho các khoá đó.

Tạo khoá API

Một dự án Firebase có thể có nhiều khoá API, nhưng mỗi khoá API chỉ có thể liên kết với một dự án Firebase.

Khoá API do Firebase tự động tạo cho Ứng dụng Firebase

Firebase sẽ tự động tạo khoá API cho dự án của bạn khi bạn thực hiện bất kỳ thao tác nào sau đây:

  • Tạo dự án Firebase > Browser key được tạo tự động
  • Tạo ứng dụng Apple Firebase > iOS key được tạo tự động
  • Tạo ứng dụng Android Firebase > Android key được tạo tự động

Bạn cũng có thể tạo khoá API của riêng mình trong bảng điều khiển Google Cloud, chẳng hạn như để phát triển hoặc gỡ lỗi. Hãy tìm hiểu thêm về thời điểm bạn nên làm việc này ở phần sau của trang này.

Tìm khoá API

Bạn có thể xem và quản lý tất cả khoá API của dự án trong bảng điều khiển API và dịch vụ > Thông tin xác thực trên bảng điều khiển Google Cloud.

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 Firebase – Tìm khoá API được so khớp tự động trong đối tượng cấu hình Firebase, 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. Các hàm này 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 truyền giá trị của khoá đó vào lệnh gọi API REST 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 một API Firebase yêu cầu khoá API do ứng dụng di động/web cung cấp, ứng dụng sẽ tự động tìm trong tệp/đối tượng cấu hình Firebase để tìm 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 lại các API được tự động thêm vào danh sách cho phép cho khoá API Firebase

Khi Firebase tạo một khoá API trong dự án của bạn, chúng tôi sẽ tự động thêm "các quy tắc hạn chế về API" vào 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 các API cần thiết để sử dụng các dịch vụ Firebase không thực sự cần phải có trong danh sách cho phép cho 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á các API khỏi danh sách cho phép, nhưng bạn phải cực kỳ cẩn thận để không xoá các API cần thiết cho Firebase và các 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 cho từng dịch vụ / sản phẩm). Nếu không, bạn sẽ gặp lỗi khi gọi các dịch vụ Firebase.

Chặt chẽ 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 nắm được khoá API của bạn, thì họ sẽ không thể truy cập vào bất kỳ cơ sở dữ liệu hoặc dữ liệu Cloud Storage nào của dự án Firebase miễ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 ai đó có thể sử dụng sai khoá API để thực hiện một cuộc tấn công bằng phương thức brute force, bạn có thể thắt chặt hạn mức mặc định của các điểm cuối identitytoolkit.googleapis.com để phản ánh lưu lượng truy cập dự kiến thông thườ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 đột nhiên thu hút người dùng, bạn có thể gặp lỗi đăng nhập cho đến khi 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, bị hạn chế cho mọi dịch vụ không phải Firebase

Mặc dù khoá API dùng cho các dịch vụ Firebase thường không cần được coi là khoá bí mật, nhưng bạn nên cẩn thận hơn với các khoá API mà bạn sử dụng với các API Google Cloud khác.

Nếu bạn sử dụng API Google Cloud (trên bất kỳ nền tảng nào) không dành cho dịch vụ / sản phẩm Firebase, bạn nên tạo các khoá API riêng biệt, 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ế các khoá khi cần và thêm các quy tắc hạn chế khác vào khoá API mà không làm gián đoạn việc sử dụng các dịch vụ Firebase.

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 nhiều dự án Firebase cho nhiều môi trường, chẳng hạn như môi trường thử nghiệm và môi trường phát hành công khai, thì điều quan trọng là mỗi thực thể ứ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 thử nghiệm của bạn cần sử dụng các khoá API liên kết với dự án Firebase thử nghiệm.

Để 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ỉ dành cho 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

Khắc phục sự cố