Bảo vệ thông tin đăng nhập Cloud của ứng dụng Firebase ML trên Android

Nếu ứng dụng Android của bạn sử dụng một trong các API trên đám mây của công nghệ học máy của Firebase, trước khi khởi chạy ứng dụng trong phiên bản chính thức, bạn nên thực hiện thêm một số bước để ngăn truy cập API trái phép.

Đối với các ứng dụng phát hành chính thức, bạn phải đảm bảo rằng chỉ những ứng dụng đã được xác thực mới có thể truy cập vào các dịch vụ đám mây. (Lưu ý rằng chỉ những thiết bị không bị can thiệp vào hệ thống mới có thể xác thực bằng phương thức đã mô tả.)

Sau đó, bạn sẽ tạo một khoá API chỉ để gỡ lỗi mà bạn có thể sử dụng để thuận tiện trong quá trình kiểm thử và phát triển.

1. Đăng ký ứng dụng phát hành công khai của bạn với Firebase

Trước tiên, hãy đăng ký ứng dụng phát hành công khai của bạn với Firebase.

  1. Đảm bảo rằng bạn có chữ ký SHA-1 của ứng dụng. Hãy tham khảo bài viết Xác thực khách hàng của bạn để tìm hiểu cách thực hiện.

  2. Chuyển đến phần Cài đặt dự án trong bảng điều khiển của Firebase, sau đó chọn thẻ Cài đặt.

  3. Cuộn xuống thẻ Ứng dụng của bạn, sau đó chọn ứng dụng Android của bạn.

  4. Thêm chữ ký SHA-1 của ứng dụng vào thông tin của ứng dụng.

2. Hạn chế phạm vi của khoá API

Tiếp theo, hãy định cấu hình các khoá API hiện có để không cho phép truy cập vào Cloud Vision API:

  1. Mở trang Thông tin xác thực của bảng điều khiển Google Cloud. Khi thấy thông báo, hãy chọn dự án của bạn.

  2. Đối với mỗi khoá API hiện có trong danh sách, hãy mở chế độ xem chỉnh sửa.

  3. Trong phần APIRestrict (Hạn chế API), hãy chọn Restrict key (Hạn chế khoá), sau đó thêm vào danh sách tất cả API mà bạn muốn khoá API có quyền truy cập. Hãy nhớ không bao gồm Cloud Vision API.

    Khi định cấu hình các quy định hạn chế về API của khoá API, bạn sẽ khai báo rõ ràng các API mà khoá đó có quyền truy cập. Theo mặc định, khi phần Hạn chế API chọn Không hạn chế khoá, bạn có thể sử dụng khoá API để truy cập vào bất kỳ API nào đã 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 các dịch vụ học máy trên đám mây, nhưng mỗi khoá sẽ tiếp tục hoạt động đối với mọi API mà bạn đã thêm vào danh sách hạn chế API.

Lưu ý rằng nếu sau này bật bất kỳ API nào khác, bạn phải thêm các API đó vào danh sách các hạn chế về API cho khoá API hiện hành.

3. Tạo và sử dụng khoá API chỉ gỡ lỗi

Cuối cùng, hãy tạo khoá API mới chỉ dùng cho mục đích phát triển. Công nghệ học máy của Firebase có thể sử dụng khoá API này để truy cập vào các dịch vụ của Google Cloud trong những môi trường không thể xác thực ứng dụng, chẳng hạn như khi chạy trên trình mô phỏng.

  1. Tạo khoá API mới dùng cho hoạt động phát triển:

    1. Mở trang Thông tin xác thực của bảng điều khiển Google Cloud. Khi thấy thông báo, hãy chọn dự án của bạn.

    2. Nhấp vào Create credentials > API key (Tạo thông tin xác thực > Khoá API) rồi ghi lại khoá API mới. Khoá này cho phép truy cập API từ các ứng dụng chưa được xác thực, vì vậy, hãy giữ bảo mật khoá này.

  2. Để đảm bảo khoá API gỡ lỗi mới không bị rò rỉ với ứng dụng đã phát hành, hãy chỉ định khoá API gỡ lỗi trong tệp kê khai Android chỉ dùng cho các bản gỡ lỗi:

    1. Nếu bạn chưa có tệp kê khai gỡ lỗi, hãy tạo một tệp kê khai gỡ lỗi bằng cách nhấp vào File > New > Other > Android Manifest File (Tệp > Mới > Khác > Tệp kê khai Android) rồi chọn debug từ các nhóm tài nguyên đích.

    2. Trong tệp kê khai gỡ lỗi, hãy thêm nội dung khai báo sau:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
      
  3. Trong ứng dụng của bạn, hãy định cấu hình công nghệ Học máy của Firebase để sử dụng tính năng so khớp dấu vân tay chứng chỉ nhằm xác thực ứng dụng của bạn trong phiên bản chính thức và để sử dụng khoá API (khoá gỡ lỗi) chỉ trong các bản gỡ lỗi:

    Kotlin+KTX

    val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder()
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch()
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f)
    // ...
    
    // And lastly:
    val options = optionsBuilder.build()
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)

    Java

    FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder =
            new FirebaseVisionCloudImageLabelerOptions.Builder();
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch();
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f);
    // ...
    
    // And lastly:
    FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build();
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);

Các bước tiếp theo

Xem danh sách kiểm tra việc phát hành để biết thông tin về việc chuẩn bị phát hành ứng dụng khi sử dụng các tính năng khác của Firebase.