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

App Check มีการรองรับผู้ให้บริการหลายรายในตัว ได้แก่ DeviceCheck และ App Attest ในแพลตฟอร์ม Apple, Play Integrity ใน Android และ reCAPTCHA Enterprise ในเว็บแอป (ภาพรวม) ซึ่งเป็นผู้ให้บริการที่เข้าใจกันดี และควรตอบสนองความต้องการของนักพัฒนาแอปส่วนใหญ่ได้ อย่างไรก็ตาม คุณยังสามารถใช้App Checkผู้ให้บริการที่กำหนดเองได้ด้วย คุณต้องใช้ผู้ให้บริการที่กำหนดเองในกรณีต่อไปนี้

  • คุณต้องการใช้ผู้ให้บริการอื่นที่ไม่ใช่ผู้ให้บริการในตัว

  • คุณต้องการใช้ผู้ให้บริการในตัวในลักษณะที่ไม่รองรับ

  • คุณต้องการยืนยันอุปกรณ์โดยใช้แพลตฟอร์มอื่นๆ ที่ไม่ใช่ Apple, Android และเว็บ เช่น คุณอาจสร้าง App Checkproviders สำหรับระบบปฏิบัติการเดสก์ท็อปหรือ อุปกรณ์อินเทอร์เน็ตออฟธิงส์

  • คุณต้องการใช้เทคนิคการยืนยันของคุณเองในแพลตฟอร์มใดก็ได้

ภาพรวม

หากต้องการติดตั้งใช้งานApp Checkผู้ให้บริการที่กำหนดเอง คุณต้องมีสภาพแวดล้อมแบ็กเอนด์ที่ปลอดภัย ซึ่งเรียกใช้ Firebase Admin SDK ของ Node.js ได้ ซึ่งอาจเป็น Cloud Functions แพลตฟอร์มคอนเทนเนอร์ เช่น Cloud Run หรือเซิร์ฟเวอร์ของคุณเอง

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

โดยปกติแล้ว คุณจะเปิดเผยบริการนี้เป็นปลายทาง REST หรือ gRPC แต่รายละเอียดนี้ขึ้นอยู่กับคุณ

สร้างปลายทางการรับโทเค็น

  1. ติดตั้งและเริ่มต้น Admin SDK

  2. สร้างปลายทางที่เข้าถึงได้ในเครือข่ายซึ่งรับข้อมูลความถูกต้องจาก ไคลเอ็นต์ของคุณได้ เช่น การใช้ Cloud Functions

    // Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken
    exports.fetchAppCheckToken = functions.https.onRequest((request, response) => {
      // ...
    });
    
  3. เพิ่มไปยังตรรกะของปลายทางที่ประเมินข้อมูลความถูกต้อง นี่คือ ตรรกะหลักของผู้ให้บริการ App Check ที่กำหนดเอง ซึ่งคุณจะต้อง เขียนเอง

  4. หากพิจารณาว่าไคลเอ็นต์เป็นของแท้ ให้ใช้ Admin SDK เพื่อสร้างโทเค็น App Check และส่งคืนโทเค็นพร้อมเวลาหมดอายุไปยังไคลเอ็นต์

    const admin = require('firebase-admin');
    admin.initializeApp();
    
    // ...
    
    admin.appCheck().createToken(appId)
        .then(function (appCheckToken) {
          // Token expires in an hour.
          const expiresAt = Math.floor(Date.now() / 1000) + 60 * 60;
    
          // Return appCheckToken and expiresAt to the client.
        })
       .catch(function (err) {
         console.error('Unable to create App Check token.');
         console.error(err);
       });
    

    หากยืนยันความถูกต้องของไคลเอ็นต์ไม่ได้ ให้แสดงข้อผิดพลาด (เช่น แสดงข้อผิดพลาด HTTP 403)

  5. ไม่บังคับ: ตั้งค่า Time to Live (TTL) สำหรับโทเค็น App Check ที่ออกโดย ผู้ให้บริการที่กำหนดเองโดยส่งออบเจ็กต์ AppCheckTokenOptions ไปยัง createToken() คุณตั้งค่า TTL เป็นค่าใดก็ได้ระหว่าง 30 นาทีถึง 7 วัน เมื่อตั้งค่านี้ โปรดทราบถึงข้อแลกเปลี่ยนต่อไปนี้

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

    TTL เริ่มต้นที่ 1 ชั่วโมงนั้นเหมาะสมสำหรับแอปส่วนใหญ่

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

ตอนนี้คุณได้ใช้ตรรกะฝั่งเซิร์ฟเวอร์ของผู้ให้บริการที่กำหนดเองแล้ว โปรดดูวิธีใช้ตรรกะดังกล่าวจากไคลเอ็นต์ Apple, Android และเว็บ