Catch up on everthing we announced at this year's Firebase Summit. Learn more

เปิดใช้งาน App Check กับผู้ให้บริการที่กำหนดเองบน Android

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

หากคุณต้องการที่จะใช้เช็คต่างกับผู้ให้บริการเริ่มต้น SafetyNet ดู เปิดใช้งานการตรวจสอบกับ App SafetyNet บน Android

ก่อนจะเริ่ม

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

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

Java

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

คอตลิน+KTX

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

2. ใช้อินเทอร์เฟซการตรวจสอบแอป

ครั้งแรกที่คุณจำเป็นต้องสร้างชั้นเรียนที่ใช้ AppCheckProvider และ AppCheckProviderFactory อินเตอร์เฟซ

คุณ AppCheckProvider ระดับต้องมี getToken() วิธีการที่รวบรวมสิ่งที่ข้อมูลที่กำหนดเอง App ผู้ให้บริการตรวจสอบของคุณต้องใช้เป็นหลักฐานในการสอบความถูกต้องและส่งไปยังบริการการเข้าซื้อกิจการของคุณโทเค็นในการแลกเปลี่ยนสำหรับ App ตรวจสอบโทเค็น ต่างเช็ค SDK จับแคชโทเค็นจึงมักได้รับโทเค็นใหม่ในการดำเนินการของคุณ getToken()

Java

public class YourCustomAppCheckToken extends AppCheckToken {
    private String token;
    private long expiration;

    YourCustomAppCheckToken(String token, long expiration) {
        this.token = token;
        this.expiration = expiration;
    }

    @NonNull
    @Override
    public String getToken() {
        return token;
    }

    @Override
    public long getExpireTimeMillis() {
        return expiration;
    }
}

public class YourCustomAppCheckProvider implements AppCheckProvider {
    @Override
    public Task<AppCheckToken> getToken() {
        // Logic to exchange proof of authenticity for an App Check token and
        //   expiration time.
        // ...

        // Refresh the token early to handle clock skew.
        long expMillis = expirationFromServer * 1000 - 60000;

        // Create AppCheckToken object.
        AppCheckToken appCheckToken =
                YourCustomAppCheckToken(tokenFromServer, expMillis);

        return appCheckToken;
    }
}

คอตลิน+KTX

class YourCustomAppCheckToken(
    private val token: String,
    private val expiration: Long
) : AppCheckToken() {
    override fun getToken(): String {
        return token
    }

    override fun getExpireTimeMillis(): Long {
        return expiration
    }
}

class YourCustomAppCheckProvider : AppCheckProvider {
    val token: Task<AppCheckToken>
        get() {
            // Logic to exchange proof of authenticity for an App Check token.
            // ...

            // Refresh the token early to handle clock skew.
            val expMillis: Long = expirationFromServer * 1000 - 60000

            // Create AppCheckToken object.
            val appCheckToken: AppCheckToken =
                    YourCustomAppCheckToken(tokenFromServer, expMillis)

            return appCheckToken!
        }
}

นอกจากนี้ยังใช้ AppCheckProviderFactory ระดับที่สร้างอินสแตนซ์ที่คุณ AppCheckProvider การดำเนินงาน:

Java

public class YourCustomAppCheckProviderFactory implements AppCheckProviderFactory {
  @Override
  public AppCheckProvider create(FirebaseApp firebaseApp) {
    // Create and return an AppCheckProvider object.
    return new YourCustomAppCheckProvider(firebaseApp);
  }
}

คอตลิน+KTX

class YourCustomAppCheckProviderFactory : AppCheckProviderFactory {
    fun create(firebaseApp: FirebaseApp): AppCheckProvider {
        // Create and return an AppCheckProvider object.
        return YourCustomAppCheckProvider(firebaseApp)
    }
}

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

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

Java

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

คอตลิน+KTX

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

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

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

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

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

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

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

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

ภาพหน้าจอของหน้าเมตริก App Check

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

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

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

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

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

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

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

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

  • หากแอปของคุณยังไม่เปิดตัว คุณควรเปิดใช้การบังคับใช้ 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 โดย การสร้างบันทึกตามตัวชี้วัดที่เคาน์เตอร์ ที่มีตัวกรองตัวชี้วัดต่อไปนี้:

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. เปิด ตรวจสอบการตั้งโครงการ> App ส่วนของคอนโซล Firebase

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

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

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

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

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