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

AndroidのアプリチェックでFirebase以外のリソースを保護する

App Checkを使用すると、自己ホスト型バックエンドなど、アプリのFirebase以外のリソースを保護できます。これを行うには、次の両方を行う必要があります。

あなたが始める前に

デフォルトのいずれかを使用して、あなたのアプリにアプリのチェックを追加SAFETYNETプロバイダ、またはカスタムプロバイダを

バックエンドリクエストでアプリチェックトークンを送信する

バックエンド要求が有効、期限が切れていない、アプリケーションは、トークン確認の呼び出しで各要求をラップ含ま確保するためにgetAppCheckToken() 。 App Checkライブラリは必要に応じてトークンを更新し、メソッドの成功リスナーでトークンにアクセスできます。

有効なトークンを取得したら、リクエストと一緒にバックエンドに送信します。あなたはこれを実現する方法の詳細は、あなた次第ですが、これは偶然の漏れや傍受するためにそれらが脆弱になりますよう、クエリパラメータを含め、URLの一部としてのAppチェックトークンを送信しません。推奨されるアプローチは、カスタムHTTPヘッダーでトークンを送信することです。

たとえば、レトロフィットを使用する場合:

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 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)
                // ...
            }
    }
}