ปกป้องข้อมูลเข้าสู่ระบบระบบคลาวด์ของแอป Firebase ML บน Android

หากแอป Android ใช้ Cloud API ของ Firebase ML ก่อนเปิดตัวแอปในเวอร์ชันที่ใช้งานจริง คุณควรทำตามขั้นตอนเพิ่มเติมเพื่อป้องกันการเข้าถึง API ที่ไม่ได้รับอนุญาต

สำหรับแอปเวอร์ชันที่ใช้งานจริง คุณจะมั่นใจได้ว่ามีเพียงไคลเอ็นต์ที่ผ่านการตรวจสอบสิทธิ์เท่านั้นที่สามารถเข้าถึงบริการระบบคลาวด์ได้ (โปรดทราบว่าเฉพาะอุปกรณ์ที่ไม่ได้มีสิทธิ์เข้าถึงระดับรากเท่านั้นที่จะตรวจสอบสิทธิ์ได้โดยใช้วิธีการที่อธิบายไว้)

จากนั้นคุณจะสร้างคีย์ API สำหรับแก้ไขข้อบกพร่องเท่านั้นและใช้เพื่อความสะดวกในระหว่างการทดสอบและการพัฒนาได้

1. ลงทะเบียนแอปเวอร์ชันที่ใช้งานจริงกับ Firebase

ก่อนอื่น ให้ลงทะเบียนแอปเวอร์ชันที่ใช้งานจริงกับ Firebase

  1. ตรวจสอบว่าคุณมีลายเซ็น SHA-1 ของแอป โปรดดูวิธีดำเนินการที่การตรวจสอบสิทธิ์ลูกค้า

  2. ไปที่ การตั้งค่าโปรเจ็กต์ในคอนโซล Firebase แล้วเลือกแท็บการตั้งค่า

  3. เลื่อนลงไปที่การ์ดแอปของคุณ แล้วเลือกแอป Android

  4. เพิ่มลายเซ็น SHA-1 ของแอปในข้อมูลแอป

2. จำกัดขอบเขตของคีย์ API

ถัดไป ให้กำหนดค่าคีย์ API ที่มีอยู่เพื่อไม่อนุญาตให้เข้าถึง Cloud Vision API ดังนี้

  1. เปิดหน้าข้อมูลเข้าสู่ระบบของคอนโซล Google Cloud เมื่อได้รับข้อความแจ้ง ให้เลือกโปรเจ็กต์

  2. สำหรับคีย์ API ที่มีอยู่แต่ละรายการในรายการ ให้เปิดมุมมองการแก้ไข

  3. ในส่วนการจำกัด API ให้เลือกจำกัดคีย์ แล้วเพิ่ม API ทั้งหมดที่คุณต้องการให้คีย์ API มีสิทธิ์เข้าถึงลงในรายการ ตรวจสอบว่าไม่รวม Cloud Vision API ไว้ด้วย

    เมื่อกำหนดค่าข้อจำกัด API ของคีย์ API จะเป็นการประกาศ API ที่คีย์มีสิทธิ์เข้าถึงอย่างชัดแจ้ง โดยค่าเริ่มต้น เมื่อส่วนการจำกัด API เลือกไม่จำกัดคีย์ไว้ คุณจะใช้คีย์ API เพื่อเข้าถึง API ที่เปิดใช้สำหรับโปรเจ็กต์ได้

ขณะนี้คีย์ API ที่มีอยู่จะไม่ให้สิทธิ์เข้าถึงบริการ Cloud ML แต่แต่ละคีย์จะยังคงทำงานต่อไปกับ API ที่คุณเพิ่มลงในรายการข้อจำกัด API

โปรดทราบว่าหากเปิดใช้ API เพิ่มเติมในอนาคต คุณต้องเพิ่ม API ลงในรายการข้อจำกัดของ API สำหรับคีย์ API ที่เกี่ยวข้อง

3. สร้างและใช้คีย์ API สำหรับการแก้ไขข้อบกพร่องเท่านั้น

สุดท้าย สร้างคีย์ API ใหม่เพื่อใช้สำหรับการพัฒนาเท่านั้น Firebase ML สามารถใช้คีย์ API นี้เพื่อเข้าถึงบริการ Google Cloud ในสภาพแวดล้อมที่ไม่สามารถตรวจสอบสิทธิ์แอปได้ เช่น เมื่อทำงานในโปรแกรมจำลอง

  1. สร้างคีย์ API ใหม่เพื่อใช้ในการพัฒนา

    1. เปิดหน้าข้อมูลเข้าสู่ระบบของคอนโซล Google Cloud เมื่อได้รับข้อความแจ้ง ให้เลือกโปรเจ็กต์

    2. คลิกสร้างข้อมูลเข้าสู่ระบบ > คีย์ API และบันทึกคีย์ API ใหม่ คีย์นี้อนุญาตการเข้าถึง API จากแอปที่ไม่ได้ตรวจสอบสิทธิ์ ดังนั้นโปรดเก็บคีย์นี้เป็นความลับ

  2. โปรดระบุคีย์ API การแก้ไขข้อบกพร่องในไฟล์ Manifest ของ Android ที่ใช้สําหรับบิลด์การแก้ไขข้อบกพร่องเท่านั้น เพื่อให้มั่นใจว่าคีย์ API การแก้ไขข้อบกพร่องใหม่จะไม่รั่วไหลไปพร้อมกับแอปที่เผยแพร่

    1. หากคุณยังไม่มีไฟล์ Manifest สำหรับการแก้ไขข้อบกพร่อง ให้สร้างขึ้นมาโดยคลิก ไฟล์ > ใหม่ > อื่นๆ > ไฟล์ Manifest ของ Android แล้วเลือก debug จากชุดแหล่งที่มาเป้าหมาย

    2. ในไฟล์ Manifest ของการแก้ไขข้อบกพร่อง ให้เพิ่มการประกาศต่อไปนี้

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
      
  3. ในแอป ให้กำหนดค่า Firebase ML ให้ใช้การจับคู่ลายนิ้วมือของใบรับรองเพื่อตรวจสอบสิทธิ์ไคลเอ็นต์ในเวอร์ชันที่ใช้งานจริงและใช้คีย์ API ซึ่งเป็นคีย์การแก้ไขข้อบกพร่องเฉพาะในบิลด์การแก้ไขข้อบกพร่อง

    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);

ขั้นตอนถัดไป

ดูรายการตรวจสอบการเปิดตัวสำหรับข้อมูลในการเตรียมแอปเพื่อเปิดตัวเมื่อใช้ฟีเจอร์อื่นๆ ของ Firebase