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 các dịch vụ của Firebase và 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 với các ứ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 thường dùng khoá API, khoá API cho các dịch vụ Firebase không dùng để kiểm soát quyền truy cập vào các 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 phải bảo vệ khoá API một cách cẩn thận (ví dụ: bằng cách sử dụng dịch vụ kho lưu trữ 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ụ của Firebase vào mã hoặc tệp cấu hình đã kiểm tra.

Mặc dù khoá API cho các dịch vụ Firebase an toàn khi đưa 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 phù 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ể được liên kết với một dự án Firebase.

Khoá API do Firebase tự động tạo cho các ứng dụng Firebase của bạn

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 Firebase cho Apple > iOS key tự động tạo
  • Tạo một ứng dụng Firebase Android > Android key tự động tạo

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. Tìm hiểu thêm về thời điểm bạn có thể được đề xuất sau này trên 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 trong bảng điều khiển Google Cloud.

Bạn cũng có thể tìm thấy khoá API được tự động so khớp với một Ứng dụng Firebase ở những nơi sau đây. 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 Firebase dành cho Apple – 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 Firebaseconfig, 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 khoá này được dùng để liên kết các yêu cầu API với dự án của bạn cho hạn mức và việc 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 truyền giá trị của khoá đó vào lệnh gọi REST API dưới dạng tham số truy vấn. Ví dụ này cho thấy cách bạn có thể đưa ra yêu cầu đối với 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 gọi một API Firebase yêu cầu khoá API do ứng dụng di động/máy khách web cung cấp, ứng dụng của bạn sẽ tự động tìm khoá API của dự án trong tệp/đối tượng cấu hình Firebase. Tuy nhiên, bạn có thể cung cấp khoá API cho ứng dụng của mình bằng một cơ chế khác, bao gồm cả các biến môi trường.

Xem xét và áp dụng các quy tắc hạn chế phù hợp cho khoá API (nên dùng)

Mặc dù không cần coi khoá API cho các dịch vụ Firebase là một 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 các API được tự động thêm vào danh sách cho phép đối với khoá API Firebase

Khi Firebase tạo khoá API trong dự án của bạn, chúng tôi sẽ tự động thêm "cá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à những API liên quan đến Firebase. Các API này 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ụ của Firebase không thực sự cần phải có trong danh sách cho phép đối với khoá API của bạn.

Vì Firebase thêm các API cần thiết cho tất cả các dịch vụ Firebase, nên danh sách cho phép đối với một khoá API có thể bao gồm các API cho những 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 rất 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ụ của Firebase.

Tăng 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à ai đó có đượ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 trong dự án Firebase của bạn miễn là dữ liệu này được bảo vệ bằng Firebase Security Rules. Tuy nhiên, họ có thể 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 các yêu cầu xác thực đối với dự án của bạn.

Để giảm thiểu khả năng có người có thể sử dụng sai khoá API để cố gắng thực hiện một cuộc tấn công dò tìm, 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 kỳ vọng về lưu lượng truy cập 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 có thêm người dùng, thì 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à bí mật, nhưng bạn nên thực hiện một số biện pháp phòng ngừa bổ sung đối với khoá API mà bạn dùng với các API Google Cloud khác.

Nếu bạn sử dụng một API Google Cloud (trên bất kỳ nền tảng nào) không dành cho một dịch vụ / sản phẩm của Firebase, bạn nên tạo các khoá API riêng biệt, có hạn chế để sử dụng với những 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ó tính phí.

Ví dụ: nếu sử dụng Firebase ML và Cloud Vision API trên iOS, bạn nên tạo các khoá API riêng biệt mà bạn chỉ dùng để truy cập vào Cloud Vision API.

Bằng cách sử dụng các khoá API riêng biệt và có 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 thiết và thêm các quy tắc hạn chế khác cho các 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 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ư 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 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 dàn dựng của bạn không bao giờ được tương tác với dự án Firebase phát hành công khai. Điều này cũng có nghĩa là ứng dụng dàn dựng của bạn cần sử dụng khoá API được liên kết với dự án dàn dựng Firebase.

Để giảm các vấn đề khi chuyển đổi mã từ giai đoạn phát triển sang giai đoạn dàn dựng rồi đến giai đoạn sản xuất, 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 khoá API vào một 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. Hướng dẫn tạo loại khoá đó có trong tài liệu 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ố