ใช้ App Check เพื่อรักษาคีย์ API ให้ปลอดภัย

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

App Check เหมาะกับฉันไหม

เราขอแนะนำให้ใช้ App Check ในกรณีส่วนใหญ่ แต่ไม่จำเป็นต้องใช้ App Check หรือระบบไม่รองรับในกรณีต่อไปนี้

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

ภาพรวมของขั้นตอนการใช้งาน

ขั้นตอนโดยสังเขปในการผสานรวมแอปกับ App Check มีดังนี้

  1. เพิ่ม Firebase ไปยังแอป
  2. เพิ่มและเริ่มต้นใช้งานไลบรารี App Check
  3. เพิ่มผู้ให้บริการโทเค็นลงในแอป
  4. เริ่มต้นใช้งาน Places API และ App Check API
  5. เปิดใช้การแก้ไขข้อบกพร่อง
  6. ตรวจสอบคําขอแอปและตัดสินใจเกี่ยวกับการบังคับใช้

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

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

ข้อควรพิจารณาเมื่อวางแผนการผสานรวม App Check

ต่อไปนี้คือสิ่งที่ควรพิจารณาเมื่อวางแผนการผสานรวม

  • ผู้ให้บริการการรับรองที่เราแนะนำอย่าง Device Check หรือ App Attest อยู่ภายใต้โควต้าและข้อจำกัดที่ Apple กำหนด

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

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

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

ผสานรวมแอปกับ App Check

เกณฑ์เบื้องต้นและข้อกำหนด

  • แอปที่ติดตั้ง Places SDK เวอร์ชัน 9.2 ขึ้นไป
  • รหัส App Bundle
  • รหัสทีมจาก Apple Member Center ในส่วนการเป็นสมาชิก
  • หากคุณวางแผนที่จะใช้การตรวจสอบอุปกรณ์ ให้เตรียมไฟล์คีย์ส่วนตัวและรหัสคีย์
  • คุณต้องเป็นเจ้าของแอปในคอนโซลระบบคลาวด์
  • คุณจะต้องมีรหัสโปรเจ็กต์ของแอปจากคอนโซล Cloud

ขั้นตอนที่ 1: เพิ่ม Firebase ไปยังแอป

ทําตามวิธีการในเอกสารประกอบสําหรับนักพัฒนาแอป Firebase เพื่อเพิ่ม Firebase ลงในแอป

เมื่อลงทะเบียนแอป คุณจะได้รับไฟล์กําหนดค่า GoogleService-Info.plist เพิ่มไฟล์นี้โดยไม่มีการแก้ไขลงในระดับรูทของแอป

Swift

import FirebaseCore
import FirebaseAppCheck
import GooglePlaces

Objective-C

@import FirebaseCore;      
@import FirebaseAppCheck;
@import GooglePlaces;

ขั้นตอนที่ 2: เพิ่มคลัง App Check และเริ่มต้น App Check

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

  1. ทําตามวิธีการของ Firebase เพื่อเพิ่มคลัง App Check
  2. เริ่มต้น App Check
    • หากคุณใช้ App Attest ให้ทําตามเอกสารประกอบสําหรับนักพัฒนาแอป Firebase สําหรับ App Attest

      ทำตามวิธีการของ Firebase App Check เพื่อสร้างการใช้งาน AppCheckProviderFactory และเพิ่มลงในไฟล์ AppDelegate

      Swift

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

      Objective-C

      YourAppCheckProviderFactory *providerFactory =
          [[YourAppCheckProviderFactory alloc] init];
      [FIRAppCheck setAppCheckProviderFactory:providerFactory];
         
    • หากคุณใช้การตรวจสอบอุปกรณ์ ให้เพิ่มรายการต่อไปนี้ลงใน AppDelegate

      Swift

      AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())

      Objective-C

      [FIRAppCheck setAppCheckProviderFactory:providerFactory];
            

ขั้นตอนที่ 3: เพิ่มผู้ให้บริการโทเค็น

สร้างไฟล์ชื่อ AppCheckTokenProvider (หรือหากใช้ Objective-C ให้สร้างไฟล์ 2 ไฟล์ชื่อ AppCheckTokenProvider.h และ AppCheckTokenProvider.m) ที่ระดับรูทของแอป เพิ่มคำสั่งการนําเข้าและคําจํากัดความคลาสต่อไปนี้

Swift

// AppCheckTokenProvider.swift

import FirebaseAppCheck
import Foundation
import GooglePlaces

class AppCheckTokenProvider: NSObject, GMSPlacesAppCheckTokenProvider {
  func fetchAppCheckToken() async throws -> String {
    return try await AppCheck.appCheck().token(forcingRefresh: false).token
  }
}

Objective-C

// AppCheckTokenProvider.h

@import Foundation;
@import GooglePlaces;

@interface AppCheckTokenProvider : NSObject <GMSPlacesAppCheckTokenProvider>
@end

// AppCheckTokenProvider.m

#import "AppCheckTokenProvider.h"

@import FirebaseAppCheck;

@implementation AppCheckTokenProvider

- (void)fetchAppCheckTokenWithCompletion:(nonnull GMSAppCheckTokenCompletion)completion {
  [[FIRAppCheck appCheck]
      tokenForcingRefresh:NO
               completion:^(FIRAppCheckToken *_Nullable token, NSError *_Nullable error) {
                 if (token) {
                   completion(token.token, nil);
                 } else {
                   completion(nil, error);
                 }
               }];
}

@end

ขั้นตอนที่ 4: เริ่มต้นใช้งาน Places และ App Check API

  1. ในไฟล์ AppDelegate ให้เริ่มต้นใช้งาน Places API ดังนี้

    Swift

    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

    Objective-C

    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];
  2. จากนั้นเริ่มต้น App Check API โดยทำดังนี้

    Swift

    GMSPlacesClient.setAppCheckTokenProvider(AppCheckTokenProvider())

    Objective-C

    [GMSPlacesClient setAppCheckTokenProvider:[[AppCheckTokenProvider alloc] init]];

ขั้นตอนที่ 5: เปิดใช้การแก้ไขข้อบกพร่อง (ไม่บังคับ)

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

วิธีทดสอบแอปในโปรแกรมจำลองหรือในอุปกรณ์ทดสอบ

  • สร้างและตั้งค่าโรงงานผู้ให้บริการแก้ไขข้อบกพร่องของ App Check

    ตัวอย่างโค้ดนี้จัดการทั้งสถานการณ์การแก้ไขข้อบกพร่องและเวอร์ชันที่ใช้งานจริง

    Swift

    #if targetEnvironment(simulator)
          let providerFactory = AppCheckDebugProviderFactory()
    #else
          let providerFactory = YourAppCheckProviderFactory()
    #endif

    Objective-C

    if (targetEnvironment == simulator){
    
    FIRAppCheckDebugProviderFactory *providerFactory =
          [[FIRAppCheckDebugProviderFactory alloc] init];
    [FIRAppCheck setAppCheckProviderFactory:providerFactory];
    }
    
    else {
    
    YourAppCheckProviderFactory *providerFactory =
          [[YourAppCheckProviderFactory alloc] init];
    [FIRAppCheck setAppCheckProviderFactory:providerFactory];
    }
        
  • เปิดใช้การบันทึกในโปรเจ็กต์ Xcode, เปิดแอป และค้นหาโทเค็นแก้ไขข้อบกพร่องในเครื่องในบันทึก
  • เพิ่มโทเค็นนี้ลงในคอนโซล Firebase
  • ดูข้อมูลและวิธีการเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับ App Check

วิธีเรียกใช้แอปในสภาพแวดล้อม CI

  • สร้างโทเค็นแก้ไขข้อบกพร่องในคอนโซล Firebase แล้วเพิ่มลงในที่เก็บคีย์ที่ปลอดภัยของระบบ CI
  • ใน Xcode ให้เพิ่มตัวแปรสภาพแวดล้อมลงในรูปแบบการทดสอบโดยใช้ชื่อ FIRAAppCheckDebugToken และ $(APP_CHECK_DEBUG_TOKEN) (หรือชื่อที่คล้ายกัน) เป็นค่า
  • ในสคริปต์ทดสอบ CI ให้ส่งโทเค็นแก้ไขข้อบกพร่องเป็นสภาพแวดล้อม
  • สร้างและตั้งค่าโรงงานผู้ให้บริการแก้ไขข้อบกพร่องของ App Check

    ตัวอย่างโค้ดนี้จัดการทั้งสถานการณ์การแก้ไขข้อบกพร่องและเวอร์ชันที่ใช้งานจริง

    Swift

      #if targetEnvironment(ci)
            let providerFactory = AppCheckDebugProviderFactory()
            AppCheck.setAppCheckProviderFactory(providerFactory)
      #else
            let providerFactory = YourAppCheckProviderFactory()
      #endif
      

    Objective-C

    if (targetEnvironment == ci) {
    FIRAppCheckDebugProviderFactory *providerFactory =
          [[FIRAppCheckDebugProviderFactory alloc] init];
    [FIRAppCheck setAppCheckProviderFactory:providerFactory];
    }
    
    else {
    YourAppCheckProviderFactory *providerFactory =
          [[YourAppCheckProviderFactory alloc] init];
    [FIRAppCheck setAppCheckProviderFactory:providerFactory];
    }
  • ดูข้อมูลและวิธีการเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับ App Check

ขั้นตอนที่ 6: ตรวจสอบคําขอแอปและตัดสินใจเกี่ยวกับการบังคับใช้

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

ดูข้อมูลเพิ่มเติมและวิธีการได้ในเอกสารประกอบของ Firebase App Check