เปิดใช้งานการตรวจสอบแอปด้วย SafetyNet บน Android

หน้านี้แสดงวิธีเปิดใช้งาน App Check ในแอพ Android โดยใช้ตัวให้บริการ SafetyNet ในตัว เมื่อเปิดใช้ App Check คุณช่วยให้แน่ใจว่ามีเพียงแอปเท่านั้นที่เข้าถึงทรัพยากร Firebase ของโปรเจ็กต์ได้ ดู ภาพรวม ของคุณลักษณะนี้

หากคุณต้องการใช้ App Check กับผู้ให้บริการที่คุณกำหนดเอง โปรดดู ที่ Implement a custom App Check provider

1. ตั้งค่าโปรเจ็กต์ Firebase ของคุณ

  1. เพิ่ม Firebase ให้กับโปรเจ็กต์ Android หากยังไม่ได้ดำเนินการ

  2. ลงทะเบียนแอปของคุณเพื่อใช้ App Check กับผู้ให้บริการ SafetyNet ในส่วน App Check ของคอนโซล Firebase คุณจะต้อง ระบุลายนิ้วมือ SHA-256 ของใบรับรองการลงนามของแอป

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

  3. ไม่บังคับ : ในการตั้งค่าการลงทะเบียนแอพ ตั้งค่า time-to-live (TTL) แบบกำหนดเองสำหรับโทเค็น App Check ที่ออกโดยผู้ให้บริการ คุณสามารถตั้งค่า TTL เป็นค่าใดก็ได้ระหว่าง 30 นาทีถึง 7 วัน เมื่อเปลี่ยนค่านี้ โปรดระวังการประนีประนอมต่อไปนี้:

    • ความปลอดภัย: TTL ที่สั้นกว่านั้นให้การรักษาความปลอดภัยที่แข็งแกร่งกว่า เนื่องจากช่วยลดหน้าต่างที่ผู้โจมตีสามารถใช้โทเค็นที่รั่วหรือถูกดักจับในทางที่ผิด
    • ประสิทธิภาพ: TTL ที่สั้นลงหมายความว่าแอปของคุณจะดำเนินการรับรองบ่อยขึ้น เนื่องจากกระบวนการรับรองแอปจะเพิ่มเวลาในการตอบสนองให้กับคำขอเครือข่ายทุกครั้งที่ดำเนินการ TTL แบบสั้นจึงอาจส่งผลต่อประสิทธิภาพของแอปได้
    • โควต้าและค่าใช้จ่าย: TTL ที่สั้นลงและการรับรองซ้ำบ่อยครั้งจะทำให้โควต้าของคุณหมดเร็วขึ้น และสำหรับบริการที่ชำระเงิน อาจมีราคาสูงกว่า ดู โควต้าและขีดจำกัด

    TTL เริ่มต้น 1 ชั่วโมง นั้นสมเหตุสมผลสำหรับแอปส่วนใหญ่ โปรดทราบว่าไลบรารี App Check จะรีเฟรชโทเค็นที่ระยะเวลา TTL ประมาณครึ่งหนึ่ง

2. เพิ่มไลบรารี App Check ในแอปของคุณ

ในไฟล์ Gradle ของโมดูล (ระดับแอป) ของคุณ (โดยปกติคือ app/build.gradle ) ประกาศการพึ่งพาสำหรับไลบรารี App Check Android:

Java

dependencies {
    implementation 'com.google.firebase:firebase-appcheck-safetynet:16.0.0'
}

Kotlin+KTX

dependencies {
    implementation 'com.google.firebase:firebase-appcheck-safetynet:16.0.0'
}

3. เริ่มต้นการตรวจสอบแอป

เพิ่มโค้ดการเริ่มต้นต่อไปนี้ในแอปของคุณเพื่อให้ทำงานก่อนที่คุณจะใช้ Firebase SDK อื่นๆ

Java

FirebaseApp.initializeApp(/*context=*/ this);
FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
firebaseAppCheck.installAppCheckProviderFactory(
        SafetyNetAppCheckProviderFactory.getInstance());

Kotlin+KTX

FirebaseApp.initializeApp(/*context=*/this)
val firebaseAppCheck = FirebaseAppCheck.getInstance()
firebaseAppCheck.installAppCheckProviderFactory(
    SafetyNetAppCheckProviderFactory.getInstance()
)

เมื่อติดตั้งไลบรารี App Check ในแอปของคุณแล้ว ให้เริ่มแจกจ่ายแอปที่อัปเดตไปยังผู้ใช้ของคุณ

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

4. ตรวจสอบตัวชี้วัดคำขอ

ขณะนี้แอปที่อัปเดตของคุณอยู่ในมือของผู้ใช้แล้ว คุณสามารถเปิดใช้การบังคับใช้ App Check สำหรับผลิตภัณฑ์ Firebase ที่คุณใช้ได้ อย่างไรก็ตาม ก่อนที่คุณจะดำเนินการดังกล่าว คุณควรตรวจสอบให้แน่ใจว่าการทำเช่นนั้นจะไม่รบกวนผู้ใช้ที่ถูกต้องตามกฎหมายที่มีอยู่ของคุณ

ฐานข้อมูลเรียลไทม์, Cloud Firestore และ Cloud Storage

เครื่องมือสำคัญที่คุณสามารถใช้ในการตัดสินใจนี้สำหรับฐานข้อมูลเรียลไทม์, Cloud Firestore และ Cloud Storage คือหน้าจอตัววัดคำขอ App Check

หากต้องการดูเมตริกคำขอ App Check สำหรับผลิตภัณฑ์ ให้เปิดส่วนการ ตรวจสอบแอป ของคอนโซล Firebase ตัวอย่างเช่น:

สกรีนช็อตของหน้าเมตริก App Check

ตัวชี้วัดคำขอสำหรับแต่ละผลิตภัณฑ์แบ่งออกเป็นสี่หมวดหมู่:

  • คำขอที่ ตรวจสอบ แล้วคือคำขอที่มีโทเค็นการตรวจสอบแอปที่ถูกต้อง หลังจากที่คุณเปิดใช้งานการบังคับใช้ App Check เฉพาะคำขอในหมวดหมู่นี้เท่านั้นที่จะสำเร็จ

  • คำขอ ของไคลเอ็นต์ที่ล้าสมัย คือคำขอที่ไม่มีโทเค็นการตรวจสอบแอป คำขอเหล่านี้อาจมาจาก Firebase SDK เวอร์ชันเก่าก่อนที่ App Check จะรวมอยู่ในแอป

  • คำขอ ต้นทางที่ไม่รู้จัก คือคำขอที่ไม่มีโทเค็นการตรวจสอบแอป และดูเหมือนว่าไม่ได้มาจาก Firebase SDK สิ่งเหล่านี้อาจมาจากคำขอที่สร้างด้วยคีย์ API ที่ถูกขโมยหรือคำขอที่ปลอมแปลงซึ่งทำโดยไม่มี Firebase SDK

  • คำขอที่ ไม่ถูกต้อง คือคำขอที่มีโทเค็นการตรวจสอบแอปที่ไม่ถูกต้อง ซึ่งอาจมาจากไคลเอ็นต์ปลอมที่พยายามแอบอ้างเป็นแอปของคุณ หรือจากสภาพแวดล้อมที่จำลองขึ้น

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

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

  • หากคำขอล่าสุดส่วนใหญ่มาจากไคลเอ็นต์ที่มีแนวโน้มว่าจะล้าสมัย เพื่อหลีกเลี่ยงไม่ให้ผู้ใช้หยุดชะงัก ให้พิจารณารอให้ผู้ใช้อัปเดตแอปของคุณมากขึ้นก่อนที่จะเปิดใช้การบังคับใช้ การบังคับใช้ App Check ในแอปที่เผยแพร่จะทำให้แอปเวอร์ชันก่อนหน้าซึ่งไม่ได้รวมเข้ากับ SDK ของ App Check

  • หากแอปของคุณยังไม่เปิดตัว คุณควรเปิดใช้การบังคับใช้ App Check ทันที เนื่องจากไม่มีไคลเอ็นต์ที่ล้าสมัยที่ใช้งานอยู่

ฟังก์ชั่นคลาวด์

สำหรับ Cloud Functions คุณสามารถรับเมตริก App Check ได้โดยตรวจสอบบันทึกของฟังก์ชัน การเรียกใช้ฟังก์ชันที่เรียกได้ทุกครั้งจะปล่อยรายการบันทึกที่มีโครงสร้างดังตัวอย่างต่อไปนี้

{
  "severity": "INFO",    // INFO, WARNING, or ERROR
  "logging.googleapis.com/labels": {"firebase-log-type": "callable-request-verification"},
  "jsonPayload": {
    "message": "Callable header verifications passed.",
    "verifications": {
      // ...
      "app": "MISSING",  // VALID, INVALID, or MISSING
    }
  }
}

คุณวิเคราะห์เมตริกเหล่านี้ได้ใน Google Cloud Console โดย สร้างตัวนับตามบันทึกโดยใช้ ตัวกรองเมตริกต่อไปนี้

resource.type="cloud_function"
resource.labels.function_name="YOUR_CLOUD_FUNCTION"
resource.labels.region="us-central1"
labels.firebase-log-type="callable-request-verification"

ติดป้ายกำกับตัววัด โดยใช้ฟิลด์ jsonPayload.verifications.appCheck

5. เปิดใช้งานการบังคับใช้

หากต้องการเปิดใช้การบังคับใช้ ให้ทำตามคำแนะนำสำหรับแต่ละผลิตภัณฑ์ด้านล่าง เมื่อคุณเปิดใช้งานการบังคับใช้สำหรับผลิตภัณฑ์ คำขอที่ไม่ได้รับการยืนยันทั้งหมดสำหรับผลิตภัณฑ์นั้นจะถูกปฏิเสธ

ฐานข้อมูลเรียลไทม์, Cloud Firestore และ Cloud Storage

ในการเปิดใช้การบังคับใช้สำหรับฐานข้อมูลเรียลไทม์, Cloud Firestore (iOS และ Android) และที่เก็บข้อมูลบนคลาวด์:

  1. เปิดส่วนการ ตรวจสอบแอป ของคอนโซล Firebase

  2. ขยายมุมมองเมตริกของผลิตภัณฑ์ที่คุณต้องการเปิดใช้การบังคับใช้

  3. คลิก บังคับ ใช้และยืนยันการเลือกของคุณ

โปรดทราบว่าอาจใช้เวลาถึง 15 นาทีหลังจากที่คุณเปิดใช้การบังคับใช้เพื่อให้มีผล

ฟังก์ชั่นคลาวด์

โปรดดูที่ เปิดใช้การบังคับใช้การตรวจสอบแอปสำหรับฟังก์ชันระบบคลาวด์

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

หลังจากที่คุณได้ลงทะเบียนแอปของคุณสำหรับ App Check แล้ว คุณต้องการเรียกใช้แอปของคุณในสภาพแวดล้อมที่โดยปกติ App Check จะไม่จัดประเภทว่าถูกต้อง เช่น โปรแกรมจำลองระหว่างการพัฒนา หรือจากสภาพแวดล้อมการรวมอย่างต่อเนื่อง (CI) คุณสามารถ สร้างบิลด์การดีบักของแอปที่ใช้ผู้ให้บริการดีบัก App Check แทนผู้ให้บริการการรับรองจริง

ดู ใช้การตรวจสอบแอปกับผู้ให้บริการแก้ไขข้อบกพร่องบน Android