ปกป้องข้อมูลรับรองคลาวด์ของแอป 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. เพื่อให้แน่ใจว่าคีย์ Debug API ใหม่จะไม่รั่วไหลไปพร้อมกับแอปที่คุณเผยแพร่ ให้ระบุคีย์ Debug API ในไฟล์ Manifest ของ Android ที่ใช้สำหรับบิวด์การแก้ไขข้อบกพร่องเท่านั้น:

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

    2. ในรายการการดีบัก ให้เพิ่มการประกาศต่อไปนี้:

      <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 อื่นๆ