O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Proteja recursos não Firebase com App Check no Android

Você pode proteger os recursos não Firebase do seu aplicativo, como back-ends auto-hospedados, com App Check. Para fazer isso, você precisará modificar seu cliente de aplicativo para enviar um token de verificação de aplicativo junto com cada solicitação para seu back-end e modificar seu back-end para exigir um token de verificação de aplicativo válido com cada solicitação; ambas as tarefas são descritas abaixo.

Antes de você começar

Adicionar App Verifique para seu aplicativo, usando o padrão provedor de SafetyNet , ou um provedor personalizado .

Enviar tokens de verificação de aplicativo com solicitações de back-end

Para garantir que seus pedidos de back-end incluem um válido, não expirado, App Verifique forma, envolva cada pedido em uma chamada para getAppCheckToken() . A biblioteca App Check atualizará o token, se necessário, e você pode acessar o token no listener de sucesso do método.

Assim que tiver um token válido, envie-o junto com a solicitação para seu back-end. Os detalhes de como você conseguir isso são até você, mas não enviar App Verifique fichas como parte de URLs, incluindo parâmetros de consulta, pois isso os torna vulneráveis a vazamentos acidentais e intercepção. A abordagem recomendada é enviar o token em um cabeçalho HTTP personalizado.

Por exemplo, se você usar Retrofit:

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

Verificar tokens de verificação de aplicativo no back-end

Em seu código de back-end, se você não tiver instalado o Node.js administração SDK , faça isso. Em seguida, adicione lógica aos endpoints da API que faça o seguinte:

  • Verifique se cada solicitação inclui um token de verificação de aplicativo.

  • Verifique se o check App símbolo usando o Admin SDK appCheck().verifyToken() método.

    Se a verificação for bem sucedida, verifyToken() retorna a App decodificado Verifique token. A verificação bem-sucedida indica que o token se originou de um aplicativo pertencente ao seu projeto Firebase.

Rejeite qualquer solicitação que falhe em uma das verificações. Por exemplo, usando middleware 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.
});