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

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

قبل ان تبدأ

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

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

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

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

على سبيل المثال ، إذا كنت تستخدم التعديل التحديثي:

جافا

public class ApiWithAppCheckExample {
    private interface YourExampleBackendService {
        @GET("yourExampleEndpoint")
        Call<List<String>> exampleData(
                @Header("X-Firebase-AppCheck") String appCheckToken);
    }

    YourExampleBackendService yourExampleBackendService = new Retrofit.Builder()
            .baseUrl("https://yourbackend.example.com/")
            .build()
            .create(YourExampleBackendService.class);

    public void callApiExample() {
        FirebaseAppCheck.getInstance()
                .getAppCheckToken(false)
                .addOnSuccessListener(new OnSuccessListener<AppCheckToken>() {
                    @Override
                    public void onSuccess(@NonNull AppCheckToken tokenResponse) {
                        String appCheckToken = tokenResponse.getToken();
                        Call<List<String>> apiCall =
                                yourExampleBackendService.exampleData(appCheckToken);
                        // ...
                    }
                });
    }
}

Kotlin + KTX

class ApiWithAppCheckExample {
    interface YourExampleBackendService {
        @GET("yourExampleEndpoint")
        fun exampleData(
            @Header("X-Firebase-AppCheck") appCheckToken: String
        ): Call<List<String>>
    }

    var yourExampleBackendService: YourExampleBackendService = Retrofit.Builder()
        .baseUrl("https://yourbackend.example.com/")
        .build()
        .create(YourExampleBackendService::class.java)

    fun callApiExample() {
        FirebaseAppCheck.getInstance()
            .getAppCheckToken(false)
            .addOnSuccessListener { tokenResponse ->
                val appCheckToken = tokenResponse.token
                val apiCall = yourExampleBackendService.exampleData(appCheckToken)
                // ...
            }
    }
}

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

في التعليمات البرمجية الخلفية الخاصة بك، إذا لم تكن قد قمت بالفعل بتثبيت نود.جي إس مشرف 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.
});