Bảo vệ thông tin đăng nhập của bạn trên đám mây cho ứng dụng Android ML ML

Nếu ứng dụng Android của bạn sử dụng một trong các API đám mây của Firebase ML, thì trước khi phát hành ứng dụng công khai, bạn nên thực hiện thêm một số bước để ngăn chặn truy cập trái phép vào API.

Đối với các ứng dụng chính thức, bạn sẽ đảm bảo rằng chỉ những ứng dụng khách đã xác thực mới có thể truy cập vào các dịch vụ đám mây. (Xin lưu ý rằng chỉ những thiết bị không bị can thiệp hệ thống mới có thể xác thực bằng phương thức đượ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 chính thức 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 phần Xác thực ứng dụng để tìm hiểu cách thực hiện.

  2. Chuyển đến Project settings (Cài đặt dự án) trong bảng điều khiển Firebase, sau đó chọn thẻ Settings (Cài đặt).

  3. Di chuyể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 API Cloud Vision:

  1. Mở trang Thông tin xác thực của bảng điều khiển Google Cloud. Khi được nhắc, 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 API restrictions (Hạn chế cho API), hãy chọn Restrict key (Hạn chế cho 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 thêm API Cloud Vision.

    Khi định cấu hình các quy tắc hạn chế đối với API của khoá API, bạn đang khai báo rõ ràng các API mà khoá có quyền truy cập. Theo mặc định, khi mục API restrictions (Hạn chế cho API) chọn Don't restrict key (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 được 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 cho mọi API mà bạn đã thêm vào danh sách các quy tắc hạn chế về API.

Xin lưu ý rằng nếu bật bất kỳ API nào khác trong tương lai, bạn phải thêm các API đó vào danh sách các quy tắc hạn chế đối với API cho khoá API hiện có.

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

Cuối cùng, hãy tạo một khoá API mới chỉ dùng cho mục đích phát triển. Firebase ML có thể sử dụng khoá API này để truy cập vào các dịch vụ Google Cloud trong 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 một 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 được nhắc, hãy chọn dự án của bạn.

    2. Nhấp vào 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ữ kín 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 dựng gỡ lỗi:

    1. Nếu bạn chưa có tệp kê khai gỡ lỗi, hãy tạo 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 trong các tập hợp nguồn mục tiêu.

    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, hãy định cấu hình Firebase ML để sử dụng tính năng so khớp vân tay số của chứng chỉ nhằm xác thực ứng dụng của bạn trong phiên bản phát hành công khai và chỉ sử dụng khoá API (khoá gỡ lỗi) 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

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