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

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

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

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

ก่อนจะเริ่ม

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

  1. เพิ่มการพึ่งพาสำหรับ App ตรวจสอบโครงการของคุณ Podfile :

    pod 'Firebase/AppCheck'

    หรือหรือคุณสามารถใช้ สวิฟท์แพคเกจจัดการ แทน

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

  2. เรียก pod install และเปิดสร้าง .xcworkspace ไฟล์

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

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

คุณ AppCheckProvider ระดับต้องมี getToken(completion:) วิธีการซึ่งเก็บรวบรวมข้อมูลสิ่งที่กำหนดเอง App ผู้ให้บริการตรวจสอบของคุณต้องใช้เป็นหลักฐานในการสอบความถูกต้องและส่งไปยังบริการการเข้าซื้อกิจการของคุณโทเค็นในการแลกเปลี่ยนสำหรับ App ตรวจสอบโทเค็น ต่างเช็ค 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 ตัวชี้วัดการตรวจสอบคำขอสำหรับผลิตภัณฑ์ให้เปิด โครงการการตั้งค่า> 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 สำหรับฟังก์ชั่นคลาวด์