Android에서 앱 체크로 Firebase 외의 리소스 보호

자체 호스팅 백엔드와 같은 앱의 Firebase 외의 리소스를 App Check로 보호할 수 있습니다. 이렇게 하려면 다음 두 가지 작업을 모두 수행해야 합니다.

  • 이 페이지에 설명된 대로 각 요청에 따라 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();
                        // ...
                    }
                }
        );