Khóa API là một chuỗi duy nhất được sử 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ề khóa API cũng như các phương pháp hay nhất để sử dụng và quản lý khóa API với ứng dụng Firebase.
Thông tin chung về khóa API và Firebase
Các khóa API cho Firebase khác với các khóa API thông thường
Không giống như cách các khóa API thường được sử dụng, khóa API cho các dịch vụ Firebase không được sử dụng để kiểm soát quyền truy cập vào các tài nguyên phụ trợ ; điều đó chỉ có thể được thực hiện với Quy tắc bảo mật Firebase (để kiểm soát người dùng nào có thể truy cập tài nguyên) và Kiểm tra ứng dụng (để kiểm soát ứng dụng nào có thể truy cập tài nguyên).
Thông thường, bạn cần bảo vệ cẩn thận các khóa API (ví dụ: bằng cách sử dụng dịch vụ vault hoặc đặt các khóa làm biến môi trường); tuy nhiên, các khóa API cho các dịch vụ Firebase có thể đưa vào mã hoặc tệp cấu hình đã đăng ký.
Mặc dù khóa API cho các dịch vụ Firebase an toàn để đưa vào mã, nhưng có một số trường hợp cụ thể khi bạn nên thực thi các giới hạn cho khóa API của mình; ví dụ: nếu bạn đang sử dụng Firebase ML, Xác thực Firebase bằng phương pháp đăng nhập bằng email / mật khẩu hoặc API Google Cloud có thể thanh toán. Tìm hiểu thêm về những trường hợp này sau trên trang này.
Tạo khóa API
Một dự án Firebase có thể có nhiều khóa API, nhưng mỗi khóa API chỉ có thể được liên kết với một dự án Firebase duy nhất.
Firebase tự động tạo khóa 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> Tự động tạo
Browser key
- 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 khóa API của riêng mình trong Google Cloud Console , 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 điều này có thể được đề xuất sau trên trang này.
Tìm khóa API của bạn
Bạn có thể xem và quản lý tất cả các khóa API của dự án của mình trong bảng API & Dịch vụ> Thông tin đăng nhập trong Google Cloud Console.
Bạn cũng có thể tìm thấy khóa API nào được khớp tự động với Ứng dụng Firebase ở những nơi sau. Theo mặc định, tất cả các Ứng dụng Firebase trong dự án của bạn cho cùng một nền tảng (Apple so với Android và Web) sẽ sử dụng cùng một khóa API.
Ứng dụng Apple Firebase - Tìm khóa API được khớp tự động của ứng dụng trong tệp cấu hình Firebase,
, trong trườngGoogleService-Info.plist API_KEY
.Ứng dụng Android Firebase - Tìm khóa API được khớp tự động của ứng dụng trong tệp cấu hình Firebase,
, trong trườnggoogle-services.json current_key
.Ứng dụng web Firebase - Tìm khóa API được khớp tự động của ứng dụng trong đối tượng cấu hình Firebase, trong trường
apiKey
.
Sử dụng khóa API
Khóa API được sử 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ể, chúng được sử dụng để liên kết các yêu cầu API với dự án của bạn để lấy hạn ngạch và thanh toán. Chúng cũng hữu ích để truy cập dữ liệu công khai.
Ví dụ: bạn có thể sử dụng khóa API một cách rõ ràng bằng cách chuyển giá trị của nó 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ể đưa ra yêu cầu đối với API trình rút gọn liên kết Liên kết động :
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 tới API Firebase, ứng dụng của bạn sẽ tự động tìm trong tệp / đối tượng cấu hình Firebase cho khóa API của dự án của bạn. Tuy nhiên, bạn có thể đặt khóa API của mình bằng một cơ chế khác, bao gồm cả các biến môi trường.
Áp dụng các hạn chế cho các khóa API (được khuyến nghị)
Mặc dù không cần thiết phải coi khóa API cho các dịch vụ Firebase là bí mật, nhưng có một số trường hợp cụ thể (xem bên dưới) mà bạn có thể muốn thực hiện các biện pháp bổ sung để bảo vệ dự án của mình khỏi việc sử dụng sai khóa API.
Thắt chặt hạn ngạch nếu bạn sử dụng Xác thực dựa trên mật khẩu
Nếu bạn sử dụng Xác thực Firebase dựa trên mật khẩu và ai đó nắm giữ khóa API của bạn, 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 dữ liệu Cloud Storage của bạn miễn là dữ liệu này được bảo vệ bởi Quy tắc bảo mật của Firebase . Tuy nhiên, họ có thể sử dụng khóa API của bạn để truy cập vào các điểm cuối xác thực của Firebase và thực hiện 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 ai đó có thể sử dụng sai khóa API để thực hiện một cuộc tấn công vũ phu, bạn có thể thắt chặt hạn ngạch mặc định của điểm cuối identitytoolkit.googleapis.com
để phản ánh kỳ vọng lưu lượng truy cập bình thường của ứng dụng của bạn. Xin lưu ý rằng nếu bạn thắt chặt hạn ngạch này và ứng dụng của bạn đột nhiên có được người dùng, bạn có thể gặp lỗi đăng nhập cho đến khi tăng hạn ngạch. Bạn có thể thay đổi hạn ngạch API của dự án trong Google Cloud Console .
Sử dụng các khóa API riêng biệt, bị hạn chế cho các loại API cụ thể
Mặc dù các khóa API được sử 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 với các khóa API được sử dụng để cấp quyền truy cập vào các API Google Cloud mà bạn đã bật theo cách thủ công.
Nếu bạn sử dụng API đám mây của Google (trên bất kỳ nền tảng nào) không được Firebase tự động bật (nghĩa là bạn đã tự kích hoạt nó), bạn nên cân nhắc tạo các khóa 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 dịch vụ Google Cloud có thể thanh toán.
Ví dụ: nếu bạn sử dụng các API Cloud Vision của Firebase ML trên iOS, bạn nên tạo các khóa API riêng biệt mà bạn chỉ sử dụng để truy cập các API Cloud Vision.
Bằng cách sử dụng các khóa API hạn chế, riêng biệt cho các API không phải của Firebase, bạn có thể xoay hoặc thay thế các khóa khi cần thiết và thêm các hạn chế bổ sung cho khóa API mà không làm gián đoạn việc sử dụng các dịch vụ Firebase của bạn.
Các hướng dẫn này mô tả cách tạo một khóa API riêng biệt, bị hạn chế cho một API giả được gọi là Super Service API
.
Bước 1: Định cấu hình các khóa API hiện có của bạn để không cho phép truy cập vào Super Service API
Mở trang Thông tin xác thực của Google Cloud Console. Khi được nhắc, hãy chọn dự án của bạn.
Đối với mỗi khóa API hiện có trong danh sách, hãy mở chế độ xem chỉnh sửa.
Trong phần hạn chế API , chọn Hạn chế khóa , sau đó thêm vào danh sách tất cả các API mà bạn muốn khóa API có quyền truy cập. Đảm bảo không bao gồm API mà bạn đang tạo khóa API riêng (trong ví dụ này
Super Service API
).Khi bạn định cấu hình các hạn chế API của khóa API, bạn đang khai báo rõ ràng các API mà khóa có quyền truy cập. Theo mặc định, khi phần Hạn chế API được chọn Không hạn chế khóa , khóa API có thể được sử dụng để truy cập vào bất kỳ API nào được bật cho dự án.
Giờ đây, các khóa API hiện tại của bạn sẽ không cấp quyền truy cập vào Super Service API
, nhưng mỗi khóa sẽ tiếp tục hoạt động đối với bất kỳ API nào mà bạn đã thêm vào danh sách hạn chế API của nó.
Bước 2: Tạo và sử dụng khóa API mới để truy cập vào Super Service API
Quay lại trang Thông tin đăng nhập . Đảm bảo rằng dự án Firebase của bạn vẫn được chọn.
Nhấp vào Tạo thông tin xác thực> Khóa API . Ghi lại khóa API mới, sau đó nhấp vào Khóa hạn chế .
Trong phần Hạn chế API , hãy chọn Khóa hạn chế , sau đó chỉ thêm
Super Service API
vào danh sách.Khóa 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ụ của bạn để sử dụng khóa API mới.
Sử dụng các khóa API dành riêng cho môi trường (được khuyến nghị)
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ư giai đoạn và sản xuất, thì điều quan trọng là mỗi phiên bản ứng dụng tương tác với dự án Firebase tương ứng của nó. Ví dụ: phiên bản ứng dụng dàn dựng của bạn không bao giờ được nói chuyện với dự án Firebase sản xuất của bạn. Đ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 các khóa API được liên kết với dự án Firebase dàn dựng của bạn.
Để giảm các vấn đề thúc đẩy thay đổi mã từ phát triển sang giai đoạn sang sản xuất, thay vì bao gồm các khóa API trong chính mã, hãy đặt chúng làm biến môi trường hoặc đưa chúng vào tệp cấu hình.
Lưu ý rằng nếu bạn đ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 khóa API chỉ gỡ lỗi. Hướng dẫn tạo loại khóa đó có trong tài liệu ML của Firebase .
Câu hỏi thường gặp
Bạn có thể sử dụng bất kỳ tùy chọn nào sau đây để xác định khóa 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
Đi tới dự án , sau đó cuộn xuống thẻ Ứng dụng của bạn .
Chọn ứng dụng quan tâm.
Nhận tệp / đối tượng cấu hình Firebase cho ứng dụng quan tâm, sau đó tìm khóa API của ứng dụng đó:
Apple : Tải xuống
GoogleService-Info.plist
, sau đó tìm trườngAPI_KEY
Android : Tải xuống
google-services.json
, tìm cấu hình cho ứng dụng quan tâm (tìm tên gói của ứng dụng đó), sau đó tìm trườngcurrent_key
Web : Chọn tùy chọn Cấu hình , sau đó tìm trường
apiKey
Firebase CLI
Nhận tệp / đối tượng cấu hình Firebase cho ứng dụng quan tâm bằng cách chạy lệnh sau:
firebase apps:sdkconfig PLATFORM FIREBASE_APP_ID
- PLATFORM (một trong số):
IOS
|ANDROID
|WEB
- FIREBASE_APP_ID : số nhận dạng duy nhất do Firebase chỉ định cho Ứng dụng Firebase của bạn ( tìm ID ứng dụng của bạn )
- PLATFORM (một trong số):
Trong cấu hình Firebase đã in của ứng dụng, hãy tìm khóa API của nó:
Apple : Tìm trường
API_KEY
Android : Tìm cấu hình cho ứng dụng 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
Nhận
apiKeyId
(UID) của khóa API bằng cách gọi điểm cuối áp dụng cho ứng dụng quan tâm, sau đó chuyển giá trịapiKeyId
sang bước tiếp theo.- Apple : Gọi
projects.iosApps.get
- Android : Gọi
projects.androidApps.get
- Web : Gọi
projects.webApps.get
- Apple : Gọi
Lấy chuỗi khóa API bằng cách gọi
projects.locations.keys.getKeyString
.keyString
này là cùng một giá trị có thể được tìm thấy trong cấu phần cấu hình của Ứng dụng ( Apple | Android | Web ).
Ứng dụng Apple Firebase - Mỗi ứng dụng có tệp cấu hình riêng và chỉ có thể có một khóa API được liệt kê.
Ứng dụng Android Firebase - Tất cả ứng dụng Android trong dự án Firebase đượ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 khóa API được liệt kê. Tuy nhiên, mỗi ứng dụng trong tệp cấu hình này có thể có một khóa khác nhau được liệt kê.
Ứng dụng web Firebase - Mỗi ứng dụng có đối tượng cấu hình riêng và chỉ có thể có một khóa API được liệt kê.
Tuy nhiên, bạn có thể sử dụng nhiều khóa API với một ứng dụng. Bạn phải cung cấp cơ chế để ứng dụng của mình truy cập các khóa 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 các khóa API khác không thể phụ thuộc vào các khóa API đó được liệt kê trong tệp / đối tượng cấu hình Firebase của bạn.
Khi bạn lần đầu tiên nhận được tệp / đối tượng cấu hình Firebase của ứng dụng , Firebase sẽ kiểm tra xem có bất kỳ khóa API hiện có nào trong dự án của bạn có "Hạn chế ứng dụng" khớp với ứng dụng hay không (ví dụ: một ID gói phù hợp cho ứng dụng Apple).
Nếu Firebase không tìm thấy bất kỳ khóa hạn chế nào phù hợp, thì nó sẽ liệt kê trong tệp cấu hình / đối tượng iOS key
cho ứng dụng Apple, Android key
Android cho ứng dụng Android và Browser key
cho ứng dụng web (giả sử rằng các khóa này tồn tại và không có "Hạn chế ứng dụng" khiến chúng không khớp với ứng dụng đó).
Có, bạn có thể xóa thủ công khóa API khỏi tệp / đối tượng cấu hình của mình. Tuy nhiên, bạn phải cung cấp một số cơ chế khác để ứng dụng của mình truy cập vào khóa API (như thông qua một biến môi trường). Nếu không, mọi lệnh gọi đến dịch vụ Firebase sẽ không thành công.
Có, bạn có thể chỉnh sửa thủ công tệp / đối tượng cấu hình để liên kết khóa API khác với ứng dụng.
Lưu ý rằng nếu bạn lấy lại tệp / đối tượng cấu hình của ứng dụng từ bảng điều khiển, thì bảng điều khiển sẽ luôn liệt kê các khóa API mà Firebase tự động khớp với ứng dụng đó . Vì vậy, bạn sẽ cần lặp lại các chỉnh sửa thủ công của mình nếu cần.
Không, khóa API chỉ xác định một dự án cụ thể và không thể chuyển sang dự án khác.
Dưới đây là một số nguyên nhân phổ biến nhất khiến khóa API không hợp lệ:
Khóa API có "Hạn chế về khóa API" được áp dụng khiến ứng dụng không thể sử dụng khóa ("Hạn chế ứng dụng") hoặc không sử dụng được đối với API đang được gọi ("Hạn chế về API").
Khóa API đã bị xóa khỏi dự án trong Google Cloud Console.
Khóa API không được tạo cho ID dự án được liệt kê trong tệp / đối tượng cấu hình Firebase của ứng dụng.
Một cách để khắc phục sự cố này là tải xuống 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ũ của bạn bằng tệp / đối tượng được cập nhật mới. 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 kiểm tra xem (các) khóa API được liệt kê có khớp với (các) ứng dụng hay không .
Khóa API được ứng dụng web của bạn sử dụng có thể có "Hạn chế API" được áp dụng cho nó. Nếu đúng như vậy, hãy đảm bảo rằng API quản lý Firebase nằm trong danh sách các API được phép.
Nếu bạn xóa khóa API được một ứng dụng sử 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ố sử dụng khóa API không hợp lệ.
Việc xóa khóa API là vĩnh viễn và không thể hoàn tác.