ใช้ App Check เพื่อรักษาคีย์ API ให้ปลอดภัย
App Check ของ Firebase ช่วยปกป้องการเรียกจากแอปของคุณไปยัง Google Maps Platform โดยการบล็อกการเข้าชมที่มาจากแหล่งที่มาอื่นๆ ที่ไม่ใช่แอปที่ถูกต้องตามกฎหมาย โดยจะตรวจสอบโทเค็นจากผู้ให้บริการการรับรอง เช่น 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
- เพิ่มผู้ให้บริการโทเค็นลงในแอป
- เริ่มต้น API ของ Places และ App Check
- เปิดใช้การแก้ไขข้อบกพร่อง
- ตรวจสอบคำขอของแอปและตัดสินใจเกี่ยวกับการบังคับใช้
เมื่อผสานรวมกับ 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 ขึ้นไป
- รหัสชุดของแอป
- รหัสทีมจาก Apple Member Center ในส่วนการเป็นสมาชิก
- หากวางแผนที่จะใช้การตรวจสอบอุปกรณ์ คุณจะต้องมีไฟล์คีย์ส่วนตัวและรหัสคีย์
- คุณต้องเป็นเจ้าของแอปใน Cloud Console
- คุณจะต้องมีรหัสโปรเจ็กต์ของแอปจาก Cloud Console
ขั้นตอนที่ 1: เพิ่ม Firebase ไปยังแอป
ทําตามวิธีการในเอกสารประกอบสําหรับนักพัฒนาแอป Firebase เพื่อเพิ่ม Firebase ลงในแอป
เมื่อลงทะเบียนแอป คุณจะได้รับไฟล์การกำหนดค่า GoogleService-Info.plist
เพิ่มไฟล์นี้โดยไม่มีการแก้ไขลงในระดับรูทของแอป
Places Swift SDK สำหรับ iOS
import FirebaseCore import FirebaseAppCheck import GooglePlacesSwift
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
Places Swift SDK สำหรับ iOS
let providerFactory = YourAppCheckProviderFactory() AppCheck.setAppCheckProviderFactory(providerFactory)
Swift
let providerFactory = YourAppCheckProviderFactory() AppCheck.setAppCheckProviderFactory(providerFactory)
Objective-C
YourAppCheckProviderFactory *providerFactory = [[YourAppCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory];
- หากคุณใช้การตรวจสอบอุปกรณ์ ให้เพิ่มข้อมูลต่อไปนี้ลงใน
AppDelegate
Places Swift SDK สำหรับ iOS
AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())
Swift
AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())
Objective-C
[FIRAppCheck setAppCheckProviderFactory:providerFactory];
- หากใช้ App Attest ให้ทําตามเอกสารประกอบสําหรับนักพัฒนาแอป Firebase สําหรับ App Attest
ขั้นตอนที่ 3: เพิ่มผู้ให้บริการโทเค็น
สร้างไฟล์ชื่อ AppCheckTokenProvider
(หรือหากใช้ Objective-C ให้สร้าง 2 ไฟล์ชื่อ AppCheckTokenProvider.h
และ AppCheckTokenProvider.m
) ที่ระดับรูทของแอป
เพิ่มคำสั่งนำเข้าและคำจำกัดความคลาสต่อไปนี้
Places Swift SDK สำหรับ iOS
// AppCheckTokenProvider.swift import FirebaseAppCheck import Foundation import GooglePlacesSwift struct TokenProvider: AppCheckTokenProvider { func fetchAppCheckToken() async throws -> String { return try await AppCheck.appCheck().token(forcingRefresh: false).token } }
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 API และ App Check API
- ในไฟล์
AppDelegate
ให้เริ่มต้น Places API ดังนี้Places Swift SDK สำหรับ iOS
PlacesClient.provideAPIKey("YOUR_API_KEY")
Swift
GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C
[GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];
- จากนั้นเริ่มต้น App Check API โดยทำดังนี้
Places Swift SDK สำหรับ iOS
PlacesClient.setAppCheckTokenProvider(AppCheckTokenProvider())
Swift
GMSPlacesClient.setAppCheckTokenProvider(AppCheckTokenProvider())
Objective-C
[GMSPlacesClient setAppCheckTokenProvider:[[AppCheckTokenProvider alloc] init]];
ขั้นตอนที่ 5: เปิดใช้การแก้ไขข้อบกพร่อง (ไม่บังคับ)
หากต้องการพัฒนาและทดสอบแอปในเครื่อง หรือเรียกใช้แอปในสภาพแวดล้อมการรวมอย่างต่อเนื่อง (CI) คุณสามารถสร้างบิลด์การแก้ไขข้อบกพร่องของแอปที่ใช้ข้อมูลลับในการแก้ไขข้อบกพร่องเพื่อรับโทเค็น App Check ที่ถูกต้องได้ ซึ่งจะช่วยให้คุณหลีกเลี่ยงการใช้ผู้ให้บริการการรับรองจริงในบิลด์การแก้ไขข้อบกพร่องได้
วิธีทดสอบแอปใน Simulator หรือในอุปกรณ์ทดสอบ
สร้างและตั้งค่าโรงงานผู้ให้บริการแก้ไขข้อบกพร่องของ App Check
ตัวอย่างโค้ดนี้จะจัดการทั้งสถานการณ์การแก้ไขข้อบกพร่องและสถานการณ์การใช้งานจริงPlaces Swift SDK สำหรับ iOS
#if targetEnvironment(simulator) let providerFactory = AppCheckDebugProviderFactory() #else let providerFactory = YourAppCheckProviderFactory() #endif
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
ตัวอย่างโค้ดนี้จะจัดการทั้งสถานการณ์การแก้ไขข้อบกพร่องและสถานการณ์การใช้งานจริงPlaces Swift SDK สำหรับ iOS
#if DEBUG let providerFactory = AppCheckDebugProviderFactory() #else let providerFactory = YourAppCheckProviderFactory() #endif AppCheck.setAppCheckProviderFactory(providerFactory)
Swift
#if DEBUG let providerFactory = AppCheckDebugProviderFactory() #else let providerFactory = YourAppCheckProviderFactory() #endif AppCheck.setAppCheckProviderFactory(providerFactory)
Objective-C
#if DEBUG id<FIRAppCheckProviderFactory> providerFactory = [[FIRAppCheckDebugProviderFactory alloc] init]; #else // DEBUG id<FIRAppCheckProviderFactory> providerFactory = [[YourAppCheckProviderFactory alloc] init]; #endif // DEBUG AppCheck.setAppCheckProviderFactory(providerFactory)
- ดูข้อมูลเพิ่มเติมและวิธีการได้ที่เอกสารประกอบเกี่ยวกับ App Check
ขั้นตอนที่ 6: ตรวจสอบคำขอของแอปและตัดสินใจเกี่ยวกับการบังคับใช้
ก่อนเริ่มการบังคับใช้ คุณควรตรวจสอบว่าผู้ใช้ที่ถูกต้องตามกฎหมายของแอปจะไม่ได้รับผลกระทบ โดยไปที่หน้าจอเมตริก App Check เพื่อดูว่าการเข้าชมของแอปคิดเป็นกี่เปอร์เซ็นต์ที่ได้รับการยืนยัน ล้าสมัย หรือผิดกฎหมาย เมื่อเห็นว่าการเข้าชมส่วนใหญ่ได้รับการยืนยันแล้ว คุณจะเปิดใช้การบังคับใช้ได้
ดูข้อมูลและวิธีการเพิ่มเติมได้ที่เอกสารประกอบของ Firebase App Check