Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

ปกป้องทรัพยากรที่ไม่ใช่ Firebase ด้วย App Check บน iOS

คุณปกป้องทรัพยากรที่ไม่ใช่ Firebase ของแอปได้ เช่น แบ็กเอนด์ที่โฮสต์เองด้วย App Check ในการทำเช่นนั้น คุณจะต้องทำทั้งสองอย่างต่อไปนี้:

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

ก่อนจะเริ่ม

เพิ่มเช็ค App แอปของคุณโดยใช้ App ยืนยัน , DeviceCheck หรือ ผู้ให้บริการที่กำหนดเอง

ส่งโทเค็นตรวจสอบแอปพร้อมคำขอแบ็กเอนด์

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

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

Swift

AppCheck.appCheck().token(forcingRefresh: false) { token, error in
    guard error == nil else {
        // Handle any errors if the token was not retrieved.
        print("Unable to retrieve App Check token: \(error!)")
        return
    }
    guard let token = token else {
        print("Unable to retrieve App Check token.")
        return
    }

    // Get the raw App Check token string.
    let tokenString = token.token

    // Include the App Check token with requests to your server.
    let url = URL(string: "https://yourbackend.example.com/yourApiEndpoint")!
    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    request.setValue(tokenString, forHTTPHeaderField: "X-Firebase-AppCheck")

    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        // Handle response from your backend.
    }
    task.resume()
}

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

[[FIRAppCheck appCheck] tokenForcingRefresh:NO
                                 completion:^(FIRAppCheckToken * _Nullable token,
                                              NSError * _Nullable error) {
    if (error != nil) {
        // Handle any errors if the token was not retrieved.
        NSLog(@"Unable to retrieve App Check token: %@", error);
        return;
    }
    if (token == nil) {
        NSLog(@"Unable to retrieve App Check token.");
        return;
    }

    // Get the raw App Check token string.
    NSString *tokenString = token.token;

    // Include the App Check token with requests to your server.
    NSURL *url = [[NSURL alloc] initWithString:@"https://yourbackend.example.com/yourApiEndpoint"];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
    [request setHTTPMethod:@"GET"];
    [request setValue:tokenString forHTTPHeaderField:@"X-Firebase-AppCheck"];

    NSURLSessionDataTask *task =
        [[NSURLSession sharedSession] dataTaskWithRequest:request
                                        completionHandler:^(NSData * _Nullable data,
                                                            NSURLResponse * _Nullable response,
                                                            NSError * _Nullable error) {
        // Handle response from your backend.
    }];
    [task resume];
}];