Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Lindungi sumber daya non-Firebase dengan App Check di iOS

Anda dapat melindungi sumber daya non-Firebase aplikasi Anda, seperti backend yang dihosting sendiri, dengan App Check. Untuk melakukannya, Anda perlu memodifikasi klien aplikasi Anda untuk mengirim token App Check bersama dengan setiap permintaan ke backend Anda, dan memodifikasi backend Anda untuk meminta token App Check yang valid dengan setiap permintaan; kedua tugas dijelaskan di bawah ini.

Sebelum kamu memulai

Menambahkan App Periksa untuk aplikasi Anda, baik menggunakan App atestasi , DeviceCheck , atau penyedia kustom .

Kirim token App Check dengan permintaan backend

Untuk memastikan permintaan backend Anda termasuk valid, belum berakhir, App Periksa token, membungkus setiap permintaan dalam panggilan untuk AppCheck.token() . Pustaka App Check akan menyegarkan token jika perlu, dan Anda dapat mengakses token di blok penyelesaian metode.

Setelah Anda memiliki token yang valid, kirimkan bersama dengan permintaan ke backend Anda. Secara spesifik tentang bagaimana Anda mencapai hal ini adalah terserah Anda, tetapi tidak mengirimkan App Periksa token sebagai bagian dari URL, termasuk dalam parameter query, karena hal ini membuat mereka rentan terhadap kebocoran disengaja dan intersepsi. Contoh berikut mengirimkan token dalam header HTTP khusus, yang merupakan pendekatan yang disarankan.

Cepat

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()
}

Objective-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];
}];

Verifikasi token App Check di backend

Dalam kode backend Anda, jika Anda belum menginstal Node.js Admin SDK , melakukannya. Kemudian, tambahkan logika ke titik akhir API Anda yang melakukan hal berikut:

  • Periksa apakah setiap permintaan menyertakan token App Check.

  • Verifikasi App Periksa tanda menggunakan SDK Admin appCheck().verifyToken() metode.

    Jika verifikasi berhasil, verifyToken() mengembalikan App diterjemahkan Periksa tanda. Verifikasi yang berhasil menunjukkan token yang berasal dari aplikasi milik proyek Firebase Anda.

Tolak permintaan apa pun yang gagal dalam pemeriksaan. Misalnya, menggunakan middleware Express.js:

const express = require('express');
const app = express();

const firebaseAdmin = require('firebase-admin');
const firebaseApp = firebaseAdmin.initializeApp();

const appCheckVerification = async (req, res, next) => {
    const appCheckToken = req.header('X-Firebase-AppCheck');

    if (!appCheckToken) {
        res.status(401);
        return next('Unauthorized');
    }

    try {
        const appCheckClaims = await firebaseAdmin.appCheck().verifyToken(appCheckToken);

        // If verifyToken() succeeds, continue with the next middleware
        // function in the stack.
        return next();
    } catch (err) {
        res.status(401);
        return next('Unauthorized');
    }
}

app.get('/yourApiEndpoint', [appCheckVerification], (req, res) => {
    // Handle request.
});