App Check では、アプリで使用する Firebase 以外のリソース(セルフホスト バックエンドなど)も保護できます。そのためには、次の両方を行う必要があります。
- このページで説明するように、各リクエストとともに App Check トークンをバックエンドに送信するようにアプリ クライアントを変更します。
- カスタム バックエンドからの App Check トークンの検証で説明したように、リクエストごとに有効な App Check トークンを要求するようにバックエンドを変更します。
始める前に
デフォルトの Play Integrity プロバイダまたはカスタム プロバイダを使用して、アプリに App Check を追加します。
バックエンド リクエストと一緒に App Check トークンを送信する
期限切れでない有効な App Check トークンをバックエンド リクエストに確実に含めるには、getAppCheckToken()
の呼び出しでリクエストをラップします。App Check ライブラリが必要に応じてトークンを更新します。トークンにはメソッドの成功リスナーでアクセスできます。
有効なトークンを取得したら、リクエストと一緒にバックエンドに送信します。これを行う具体的な方法は自由に決めることができますが、クエリ パラメータを含め URL の一部として App Check トークンを送信しないでください。偶発的な漏洩や傍受に対して脆弱になります。カスタム HTTP ヘッダーでトークンを送信することをおすすめします。
たとえば、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); // ... } }); } }
リプレイ保護(ベータ版)
リプレイ保護を有効にしたエンドポイントに対してリクエストを行う場合は、getAppCheckToken()
ではなく getLimitedUseAppCheckToken()
への呼び出しでリクエストをラップします。
Kotlin+KTX
Firebase.appCheck.limitedUseAppCheckToken.addOnSuccessListener { // ... }
Java
FirebaseAppCheck.getInstance() .getLimitedUseAppCheckToken().addOnSuccessListener( new OnSuccessListener<AppCheckToken>() { @Override public void onSuccess(AppCheckToken appCheckToken) { String token = appCheckToken.getToken(); // ... } } );