ใช้ 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 มีดังนี้
- เพิ่ม Firebase ไปยังแอป
- เพิ่มและเริ่มต้นใช้งานไลบรารี App Check
- เพิ่มผู้ให้บริการโทเค็นลงในแอป
- เริ่มต้นใช้งาน Places API และ App Check API
- เปิดใช้การแก้ไขข้อบกพร่อง
- ตรวจสอบคําขอแอปและตัดสินใจเกี่ยวกับการบังคับใช้
เมื่อผสานรวมกับ 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
- ทําตามวิธีการของ Firebase เพื่อเพิ่มคลัง App Check
- เริ่มต้น 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];
- หากคุณใช้ App Attest ให้ทําตามเอกสารประกอบสําหรับนักพัฒนาแอป Firebase สําหรับ App Attest
ขั้นตอนที่ 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
- ในไฟล์
AppDelegate
ให้เริ่มต้นใช้งาน Places API ดังนี้Swift
GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C
[GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];
- จากนั้นเริ่มต้น 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