Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

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

バックエンドでアプリチェックトークンを確認する

あなたは既にインストールされていない場合は、あなたのバックエンドのコードでは、 Node.jsの管理SDKを、そう。次に、APIエンドポイントに次のロジックを追加します。

  • 各リクエストにアプリチェックトークンが含まれていることを確認します。

  • 管理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.
});