Khóa 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ề 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 bằng ứng dụng Firebase.
Thông tin chung về khóa API và Firebase
Khóa API cho Firebase khác với khóa API thông thường
Không giống như cách sử dụng khóa API thông thường, khóa API cho dịch vụ Firebase không được sử dụng để kiểm soát quyền truy cập vào 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 khóa làm biến môi trường); tuy nhiên, bạn có thể đưa khóa API cho dịch vụ Firebase vào mã hoặc tệp cấu hình đã đăng ký.
Mặc dù khóa API cho dịch vụ Firebase được đưa vào mã một cách an toàn 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 thức đăng nhập email/mật khẩu hoặc API Google Cloud có thể tính phí. 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 >
Browser key
được tạo tự động - Tạo ứng dụng Firebase Apple >
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 , ví dụ 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 trong bảng API & Dịch vụ > Thông tin xác thực trong Google Cloud Console.
Bạn cũng có thể tìm thấy khóa API nào được tự động khớp với Ứng dụng Firebase ở những nơi sau. Theo mặc định, tất cả Ứng dụng Firebase trong dự án của bạn cho cùng một nền tảng (Apple vs Android vs Web) sẽ sử dụng cùng một khóa API.
Ứng dụng Firebase của Apple - Tìm khóa API tự động khớp 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 tự động khớp 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 tự động khớp 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ụ 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 cho việc truy cập dữ liệu công cộng.
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ể gửi yêu cầu tới API rút ngắ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 để tìm khóa API của dự án. Tuy nhiên, bạn có thể đặt khóa API bằng cơ chế khác, bao gồm các biến môi trường.
Áp dụng các hạn chế cho khóa API (được khuyến nghị)
Mặc dù không cần thiết phải coi khóa API cho 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 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 Firebase . Tuy nhiên, họ có thể sử dụng khóa API của bạn để truy cập 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 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 của bạn. 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 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 dịch vụ Firebase thường không cần phải đượ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 API Google Cloud mà bạn đã bật theo cách thủ công.
Nếu bạn sử dụng API Google Cloud (trên bất kỳ nền tảng nào) không được Firebase bật tự động (nghĩa là bạn đã tự bật API đó), thì bạn nên xem xét việ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ó tính phí.
Ví dụ: nếu sử dụng API Cloud Vision của Firebase ML trên iOS, bạn nên tạo các khóa API riêng mà bạn chỉ sử dụng để truy cập API Cloud Vision.
Bằng cách sử dụng các khóa API riêng biệt, bị hạn chế cho các API không phải 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 dịch vụ Firebase của bạn.
Các hướng dẫn này mô tả cách tạo khóa API riêng biệt, bị hạn chế cho API giả có tên 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 , hãy 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 là
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 đã chọn khóa Không hạn chế , khóa API có thể được sử dụng để truy cập 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 với mọi API 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 Super Service API
Quay lại trang Thông tin xác thực . Hãy chắc chắn 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 . Hãy lưu ý đến 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 vào danh sách
Super Service API
.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 thử nghiệm và sản xuất, 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 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 bớt các vấn đề khi thúc đẩy thay đổi mã từ giai đoạn phát triển sang giai đoạn sản xuất, thay vì đưa các khóa API vào 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 đang sử dụng Bộ mô phỏng cục bộ Firebase để 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 Firebase ML .
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 mình:
Bảng điều khiển Firebase
Đi tới Cài đặt dự án rồi cuộn xuống thẻ Ứng dụng của bạn .
Chọn ứng dụng quan tâm.
Lấy tệp/đối tượng cấu hình Firebase cho ứng dụng quan tâm và sau đó tìm khóa API của nó:
Apple : Tải xuống
GoogleService-Info.plist
và 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 nó), sau đó tìm trườngcurrent_key
Web : Chọn tùy chọn Config , sau đó tìm trường
apiKey
Firebase CLI
Lấy 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):
IOS
|ANDROID
|WEB
- FIREBASE_APP_ID : mã định danh 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):
Trong cấu hình Firebase được in của ứng dụng, hãy tìm khóa API của ứng dụng:
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 nó), sau đó tìm trường
current_key
Web : Tìm trường
apiKey
API REST
Lấy
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 tới
projects.iosApps.get
- Android : Gọi
projects.androidApps.get
- Web : Gọi
projects.webApps.get
- Apple : Gọi tới
Lấy chuỗi khóa API bằng cách gọi
projects.locations.keys.getKeyString
.keyString
này có cùng giá trị có thể 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 đề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 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 đượ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 vào các khóa API khác này, chẳng hạn như thông qua 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 nhận được tệp/đối tượng cấu hình Firebase của ứng dụng lần đầu tiên, 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ụ: 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
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 khóa API theo cách thủ công 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 khóa 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 tới 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, 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 áp dụng "Hạn chế khóa API" khiến nó không thể so sánh được với ứng dụng đang cố gắng sử dụng khóa ("Hạn chế ứng dụng") hoặc không thể sử dụng được đối với API được gọi ("Hạn chế API").
Khóa API đã bị xóa khỏi dự án trong Google Cloud Console.
Khóa API chưa được tạo cho ID dự án được liệt kê trong đối tượng/tệp cấu hình Firebase của ứng dụng.
Một cách để khắc phục sự cố này là lấy phiên bản cập nhật của tệp/đối tượng cấu hình Firebase trong ứng dụng của bạn , sau đó thay thế tệp/đối tượng cấu hình cũ 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 sẽ 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 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 các API được phép.
Nếu bạn xóa khóa API đang được ứng dụng sử dụng thì 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 khi bạn cố gắng 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.