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

    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