Implementar o Firebase App Check para proteger APIs contra clientes não autorizados

Quando você chama uma API diretamente de um app para dispositivos móveis ou da Web (por exemplo, as APIs que permitem o acesso a modelos de IA generativa), ela fica vulnerável a abusos por clientes não autorizados. Para ajudar a proteger essas APIs, use Firebase App Check para verificar se todas as chamadas de API recebidas são do seu app real.

Firebase AI Logic oferece um gateway de proxy que permite a integração com Firebase App Check e protege as APIs de modelo de IA generativa chamadas pelos seus apps para dispositivos móveis e da Web. O uso de App Check com os Firebase AI Logic SDKs oferece suporte a todas as nossas configurações:

  • Protege os dois provedores da "API Gemini": Gemini Developer API e Vertex AI Gemini API.

  • Protege todos os modelos com suporte, tanto os modelos Gemini quanto os Imagen modelos.

Resumo de alto nível de como App Check funciona

Com App Check, os dispositivos que executam seu app usam um app ou provedor de atestado de dispositivos que verifica um ou ambos os itens a seguir:

  • As solicitações vêm do seu app autêntico
  • As solicitações vêm de um dispositivo autêntico que não foi comprometido

Esse atestado é anexado a todas as solicitações que o app faz usando um Firebase AI Logic SDK. Quando você ativa o App Check enforcement, as solicitações de clientes sem um atestado válido são recusadas, assim como qualquer solicitação originada de um app ou plataforma que você não autorizou.

Recomendamos que, ao configurar o App Check, você se prepare para a proteção aprimorada (conhecida como proteção contra repetição).

Você pode encontrar informações detalhadas sobre App Check na documentação, incluindo cotas e limites.

Provedores disponíveis e instruções de implementação

A documentação do App Check oferece descrições dos provedores de atestado bem como instruções de implementação.

  1. Escolha um provedor padrão e siga as instruções de implementação nos links a seguir:

    Se nenhum dos provedores padrão for suficiente para suas necessidades, então você pode implementar um provedor personalizado que use um provedor de atestado terceirizado ou suas próprias técnicas de atestado.

  2. (Recomendado) Prepare-se para a proteção aprimorada do App Check (conhecida como proteção contra repetição).

  3. (Obrigatório) Antes de lançar o app para usuários reais, ative a aplicação do App Check.

Instanciação especial necessária para o Flutter

Clique no seu provedor Gemini API para conferir o conteúdo específico do provedor e o código nesta página.

Ao usar App Check com Firebase AI Logic em apps Flutter, é necessário transmitir explicitamente o App Check durante a instanciação, como mostrado abaixo:

// ...

final ai = await FirebaseAI.googleAI(
  appCheck: FirebaseAppCheck.instance, // for Flutter, pass in App Check explicitly
);

// ...

Prepare-se para a proteção aprimorada

O uso de tokens de uso limitado é compatível com plataformas da Apple (v12.2.0 ou mais recente), Android (v17.2.0 ou mais recente, BoM v34.2.0 ou mais recente), Web (v12.3.0 ou mais recente) e Flutter (v3.2.0 ou mais recente, BoM v4.2.0 ou mais recente). O suporte para Unity será lançado em breve.

Por padrão, App Check usa tokens de sessão que têm um tempo de vida (TTL, na sigla em inglês) configurável entre 30 minutos e 7 dias. Esses tokens de sessão são armazenados em cache pelo App Check SDK e enviados com solicitações do seu app.

No futuro, App Check vai adicionar a opção de ativar a proteção contra repetição para Firebase AI Logic (semelhante ao suporte que App Check já oferece para alguns outros recursos). Quando a proteção contra repetição está ativada, ela melhora a proteção das seguintes maneiras:

  • App Check só permite solicitações se elas forem acompanhadas por um tipo especial de token chamado token de uso limitado.

  • Depois que o token de uso limitado é verificado, ele é consumido para que possa ser usado apenas uma vez, evitando ataques de repetição.

Para se preparar para a proteção contra repetição, recomendamos que você ative o uso de tokens de uso limitado como parte da configuração do App Check. Dessa forma, quando a proteção contra repetição estiver disponível, você poderá ativá-la mais cedo, porque mais usuários estarão em versões do seu app que enviam tokens de uso limitado.

Observe o seguinte se você ativar o uso de tokens de uso limitado no seu app agora (enquanto a proteção contra repetição não estiver disponível):

  • App Check não bloqueia o uso de tokens de sessão válidos.

  • Assim como os tokens de sessão, os tokens de uso limitado são armazenados em cache pelo App Check SDK e enviados com solicitações. Esses tokens de uso limitado oferecem uma pequena quantidade de proteção adicional em comparação com os tokens de sessão padrão , porque os tokens de uso limitado têm um TTL mais curto (apenas 5 minutos e não ajustável) em comparação com os tokens de sessão.

  • Embora os tokens de uso limitado sejam válidos por 5 minutos, o SDK ainda vai gerar um novo token para cada solicitação. Esse processo pode adicionar alguma latência à solicitação.

No entanto, quando a proteção contra repetição estiver disponível para Firebase AI Logic no futuro (e você a ativar), o uso de tokens de sessão e a reutilização de tokens de uso limitado não serão possíveis. A latência adicional para gerar um novo token para cada solicitação ainda vai ocorrer.

Ativar o uso de tokens de uso limitado

Clique no seu provedor Gemini API para conferir o conteúdo específico do provedor e o código nesta página.

Veja como ativar o uso de tokens de uso limitado:

  1. Implemente App Check e verifique se você ativou a aplicaçãoApp Check no seu app.

  2. No seu app durante a instanciação, ative o uso de tokens de uso limitado definindo o parâmetro useLimitedUseAppCheckTokens como true:

    Swift

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    let ai = FirebaseAI.firebaseAI(
      backend: .googleAI(),
      useLimitedUseAppCheckTokens: true
    )
    
    // ...
    
    

    Kotlin

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    val ai = Firebase.ai(
      backend = GenerativeBackend.googleAI(),
      useLimitedUseAppCheckTokens = true
    )
    
    // ...
    
    

    Java

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    FirebaseAI ai = FirebaseAI.getInstance(
      /* backend: */ GenerativeBackend.googleAI(),
      /* useLimitedUseAppCheckTokens: */ true
    );
    
    // ...
    
    

    Web

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    const ai = getAI(firebaseApp, {
      backend: new GoogleAIBackend(),
      useLimitedUseAppCheckTokens: true
    });
    
    // ...
    
    

    Dart

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    final ai = await FirebaseAI.googleAI(
      appCheck: FirebaseAppCheck.instance, // for Flutter, pass in App Check explicitly
      useLimitedUseAppCheckTokens: true,
    );
    
    // ...
    
    

    Unity

    O uso de tokens de uso limitado com jogos do Unity será compatível em uma versão futura. Verifique novamente mais tarde.

Entenda como Firebase AI Logic se integra ao App Check

Para usar os Firebase AI Logic SDKs, a Firebase AI Logic API (firebasevertexai.googleapis.com) precisa estar ativada no seu projeto do Firebase. Isso ocorre porque as solicitações feitas pelos Firebase AI Logic SDKs são enviadas primeiro ao Firebase AI Logic servidor, que atua como um gateway de proxy em que a verificação Firebase App Check ocorre antes que a solicitação possa prosseguir para o back-end do provedor "Gemini API" escolhido e as APIs para acessar os modelos Gemini e Imagen.