เปิดใช้งาน App Check กับผู้ให้บริการที่กำหนดเองบนแพลตฟอร์ม Apple

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

หากคุณต้องการใช้ App Check กับผู้ให้บริการในตัว โปรดดูเอกสารสำหรับ App Check with App Attest และ App Check with DeviceCheck

ก่อนจะเริ่ม

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

  1. เพิ่มการพึ่งพา App Check ให้กับ Podfile ของโปรเจ็กต์ของคุณ:

    pod 'FirebaseAppCheck'

    หรือคุณสามารถใช้ Swift Package Manager แทนได้

    นอกจากนี้ ตรวจสอบให้แน่ใจว่าคุณกำลังใช้ไลบรารีไคลเอ็นต์บริการ Firebase เวอร์ชันล่าสุดที่คุณพึ่งพา

  2. เรียกใช้การ pod install และเปิดไฟล์ . .xcworkspace ที่สร้างขึ้น

2. ใช้โปรโตคอลการตรวจสอบแอป

ขั้นแรก คุณต้องสร้างคลาสที่ใช้โปรโตคอล AppCheckProvider และ AppCheckProviderFactory

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

Swift

class YourCustomAppCheckProvider: NSObject, AppCheckProvider {
    var app: FirebaseApp

    init(withFirebaseApp app: FirebaseApp) {
        self.app = app
        super.init()
    }

    func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {
        DispatchQueue.main.async {
            // Logic to exchange proof of authenticity for an App Check token.
            // ...

            // Create AppCheckToken object.
            let exp = Date(timeIntervalSince1970: expirationFromServer)
            let token = AppCheckToken(
                token: tokenFromServer,
                expirationDate: exp
            )

            // Pass the token or error to the completion handler.
            handler(token, nil)
        }
    }
}

วัตถุประสงค์-C

@interface YourCustomAppCheckProvider : NSObject <FIRAppCheckProvider>

@property FIRApp *app;

- (id)initWithApp:(FIRApp *)app;

@end

@implementation YourCustomAppCheckProvider

- (id)initWithApp:app {
    self = [super init];
    if (self) {
        self.app = app;
    }
    return self;
}

- (void)getTokenWithCompletion:(nonnull void (^)(FIRAppCheckToken * _Nullable,
                                                 NSError * _Nullable))handler {
    dispatch_async(dispatch_get_main_queue(), ^{
        // Logic to exchange proof of authenticity for an App Check token.
        // ...

        // Create FIRAppCheckToken object.
        NSTimeInterval exp = expirationFromServer;
        FIRAppCheckToken *token
            = [[FIRAppCheckToken alloc] initWithToken:tokenFromServer
                                       expirationDate:[NSDate dateWithTimeIntervalSince1970:exp]];

        // Pass the token or error to the completion handler.
        handler(token, nil);
    });
}

@end

นอกจากนี้ ให้ใช้คลาส AppCheckProviderFactory ที่สร้างอินสแตนซ์ของการใช้งาน AppCheckProvider ของคุณ:

Swift

class YourCustomAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
    return YourCustomAppCheckProvider(withFirebaseApp: app)
  }
}

วัตถุประสงค์-C

@interface YourCustomAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourCustomAppCheckProviderFactory

- (nullable id<FIRAppCheckProvider>)createProviderWithApp:(FIRApp *)app {
    return [[YourCustomAppCheckProvider alloc] initWithApp:app];
}

@end

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

เพิ่มรหัสการเริ่มต้นต่อไปนี้ให้กับผู้รับมอบสิทธิ์แอปหรือตัวเริ่มต้นแอป:

Swift

let providerFactory = YourAppCheckProviderFactory()
AppCheck.setAppCheckProviderFactory(providerFactory)

FirebaseApp.configure()

วัตถุประสงค์-C

YourAppCheckProviderFactory *providerFactory =
        [[YourAppCheckProviderFactory alloc] init];
[FIRAppCheck setAppCheckProviderFactory:providerFactory];

[FIRApp configure];

เมื่อติดตั้งไลบรารี 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 ในแอปที่วางจำหน่ายจะทำให้แอปเวอร์ชันก่อนหน้าซึ่งไม่ได้รวมเข้ากับ 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 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 นาทีหลังจากที่คุณเปิดใช้การบังคับใช้เพื่อให้มีผล

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

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