Android पर ऐप्लिकेशन की जांच करने की सुविधा की मदद से, Firebase से बाहर के संसाधनों को सुरक्षित रखना

Firebase को छोड़कर, अपने ऐप्लिकेशन के संसाधनों को सुरक्षित रखा जा सकता है. उदाहरण के लिए, खुद होस्ट किए गए बैकएंड, को ऐप्लिकेशन की जांच करने की सुविधा मिलती है. ऐसा करने के लिए, आपको ये दोनों काम करने होंगे:

  • अपने ऐप्लिकेशन क्लाइंट में बदलाव करें, ताकि वह हर अनुरोध के साथ App Check टोकन भेज सके अपने बैकएंड के लिए उपलब्ध है, जैसा कि इस पृष्ठ पर बताया गया है.
  • अपने बैकएंड में बदलाव करें, ताकि हर अनुरोध के साथ एक मान्य ऐप्लिकेशन चेक टोकन ज़रूरी हो. जैसा कि कस्टम बैकएंड से, ऐप्लिकेशन की जांच वाले टोकन की पुष्टि करने में बताया गया है.

शुरू करने से पहले

डिफ़ॉल्ट के तौर पर सेट किए गए किसी ऐप्लिकेशन का इस्तेमाल करके, अपने ऐप्लिकेशन में ऐप्लिकेशन की जांच करने की सुविधा जोड़ें Play को पूरी सुरक्षा देने की सुविधा या कस्टम कंपनी चुनें.

बैकएंड अनुरोधों के साथ, ऐप्लिकेशन की जांच वाले टोकन भेजें

यह पक्का करने के लिए कि आपके बैकएंड अनुरोधों में ऐप्लिकेशन की जांच के लिए टोकन, मान्य, उसकी समयसीमा खत्म न हुई हो, getAppCheckToken() को किए जाने वाले कॉल में हर अनुरोध को शामिल करें. App Check लाइब्रेरी ज़रूरत पड़ने पर टोकन को रीफ़्रेश कर देगा और टोकन को यहां जाकर ऐक्सेस कर सकता है: का सबसे अहम हिस्सा है.

आपको मान्य टोकन मिलने के बाद, उसे अपने बैकएंड पर अनुरोध के साथ भेजें. कॉन्टेंट बनाने यह आप पर निर्भर करता है कि आप इसे कैसे पूरा करते हैं, लेकिन यूआरएल के हिस्से के तौर पर ऐप्लिकेशन की जांच के टोकन. इसमें क्वेरी पैरामीटर भी शामिल हैं. इनके अलावा, इनमें गलती से होने वाले लीक और इंटरसेप्शन का खतरा ज़्यादा होता है. इसका सुझाव टोकन को किसी कस्टम एचटीटीपी हेडर में भेजने का तरीका बताया गया है.

उदाहरण के लिए, अगर Retrofit का इस्तेमाल किया जाता है, तो:

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() {
        Firebase.appCheck.getAppCheckToken(false).addOnSuccessListener { appCheckToken ->
            val token = appCheckToken.token
            val apiCall = yourExampleBackendService.exampleData(token)
            // ...
        }
    }
}

Java

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 appCheckToken) {
                        String token = appCheckToken.getToken();
                        Call<List<String>> apiCall =
                                yourExampleBackendService.exampleData(token);
                        // ...
                    }
                });
    }
}

रीप्ले प्रोटेक्शन (बीटा वर्शन)

किसी ऐसे एंडपॉइंट को अनुरोध करते समय जिसके लिए आपने अनुरोध किया है फिर से चलाने पर मिलने वाली सुरक्षा, अनुरोध को इसके बजाय getLimitedUseAppCheckToken() को कॉल में रैप करें getAppCheckToken():

Kotlin+KTX

Firebase.appCheck.limitedUseAppCheckToken.addOnSuccessListener {
    // ...
}

Java

FirebaseAppCheck.getInstance()
        .getLimitedUseAppCheckToken().addOnSuccessListener(
                new OnSuccessListener<AppCheckToken>() {
                    @Override
                    public void onSuccess(AppCheckToken appCheckToken) {
                        String token = appCheckToken.getToken();
                        // ...
                    }
                }
        );