احمِ الموارد بخلاف Firebase باستخدام التحقق من التطبيق على iOS

يمكنك حماية موارد تطبيقك بخلاف Firebase ، مثل الخلفيات المستضافة ذاتيًا ، باستخدام App Check. للقيام بذلك ، ستحتاج إلى تعديل عميل التطبيق الخاص بك لإرسال رمز التحقق من التطبيق جنبًا إلى جنب مع كل طلب إلى الواجهة الخلفية الخاصة بك ، وتعديل الواجهة الخلفية الخاصة بك لتتطلب رمز التحقق من التطبيق صالحًا مع كل طلب ؛ يتم وصف كلا المهمتين أدناه.

قبل ان تبدأ

إضافة التطبيقات تحقق على التطبيق الخاص بك، وذلك باستخدام إما التطبيقات تشهد ، DeviceCheck ، أو مزود مخصص .

إرسال رموز التحقق من التطبيق مع طلبات الخلفية

لضمان تتضمن طلبات الخلفية الخاصة بك صالح، المتبقية، التطبيقات تحقق رمز، والتفاف كل طلب في استدعاء AppCheck.token() . ستقوم مكتبة App Check بتحديث الرمز المميز إذا لزم الأمر ، ويمكنك الوصول إلى الرمز المميز في كتلة إكمال الطريقة.

بمجرد حصولك على رمز صالح ، أرسله مع الطلب إلى الواجهة الخلفية الخاصة بك. تفاصيل كيفية تحقيق ذلك هي متروك لكم، ولكن لا ترسل التطبيقات تحقق الرموز كجزء من عناوين المواقع، بما في ذلك معلمات الاستعلام، وهذا يجعلهم عرضة للتسرب عرضي واعتراض. يرسل المثال التالي الرمز المميز في رأس HTTP المخصص ، وهو الأسلوب الموصى به.

سويفت

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

ج موضوعية

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

تحقق من التطبيق التحقق من الرموز المميزة على الواجهة الخلفية

في التعليمات البرمجية الخلفية الخاصة بك، إذا لم تكن قد قمت بالفعل بتثبيت نود.جي إس مشرف SDK ، أن تفعل ذلك. بعد ذلك ، أضف منطقًا إلى نقاط نهاية واجهة برمجة التطبيقات الخاصة بك والذي يقوم بما يلي:

  • تحقق من أن كل طلب يتضمن رمز التحقق من التطبيق.

  • التحقق من التحقق من التطبيقات رمز باستخدام SDK الادارية في appCheck().verifyToken() الأسلوب.

    إذا نجح التحقق، verifyToken() إرجاع التطبيقات فك تحقق رمزية. يشير التحقق الناجح إلى أن الرمز المميز نشأ من تطبيق ينتمي إلى مشروع Firebase الخاص بك.

رفض أي طلب يفشل أي من الشيكات. على سبيل المثال ، باستخدام برمجية 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.
});