ปกป้องข้อมูลรับรองระบบคลาวด์ของแอป Firebase ML Android ของคุณ

หากแอป Android ของคุณใช้ 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 Console เมื่อได้รับแจ้ง ให้เลือกโครงการของคุณ

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

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

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

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

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

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

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

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

    1. เปิดหน้า ข้อมูลรับรอง ของ Google Cloud Console เมื่อได้รับแจ้ง ให้เลือกโครงการของคุณ

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

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

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

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

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

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

    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)

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

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