Integrar o Identity Platform à API reCAPTCHA Enterprise

Neste documento, mostramos como usar a integração do Identity Platform com a API reCAPTCHA Enterprise para aumentar a segurança dos seus usuários. Esse recurso torna seu app mais resiliente contra spam, abuso e outras atividades fraudulentas.

A integração cria uma avaliação do reCAPTCHA Enterprise em seu nome para validar as solicitações do usuário. Para informações sobre preços, consulte preços do reCAPTCHA.

Visão geral

Ao configurar a integração do Identity Platform com a API reCAPTCHA Enterprise, você ativa o recurso de proteção padrão do reCAPTCHA, que é a proteção contra bots. Com a proteção contra bots, o Identity Platform provisiona chaves do reCAPTCHA baseadas em pontuação no seu projeto em seu nome. Quando um usuário acessa seu app ou site usando qualquer uma das operações a seguir, o SDK do cliente carrega o reCAPTCHA quando o provedor correspondente está ativado.

Provedor Operação Método
passwordProvider Login com e-mail e senha signInWithPassword
Inscrição com e-mail e senha signUpPassword
Login com link por e-mail getOobCode
Redefinição de senha getOobCode
phoneProvider Inscrição ou login com número de telefone sendVerificationCode
Registro do número de telefone para MFA mfaSmsEnrollment
Login com número de telefone para MFA mfaSmsSignIn

Em seguida, o reCAPTCHA fornece ao Identity Platform pontuações que avaliam o risco da solicitação com base na sua configuração e tolerância a riscos.

Para mais informações, consulte Visão geral do reCAPTCHA.

Antes de começar

Com base no tipo de fluxo de autenticação que você quer proteger com o reCAPTCHA, verifique se você configurou o seguinte:

Criar uma conta de serviço

A integração do Identity Platform com a API reCAPTCHA Enterprise exige uma conta de serviço do Identity Platform para cada projeto que vai usar o reCAPTCHA. Isso permite que a Identity Platform gerencie chaves do reCAPTCHA em seu nome. Se você já criou uma conta de serviço, conceda a ela acesso ao reCAPTCHA.

Se você ainda não criou uma conta de serviço ou tem outros projetos que quer proteger com o reCAPTCHA, faça o seguinte:

  1. Use a Google Cloud CLI para criar uma conta de serviço:

    gcloud beta services identity create \
        --service=identitytoolkit.googleapis.com \
        --project=PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do projeto.

  2. Conceda à conta de serviço acesso ao reCAPTCHA:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-identitytoolkit.iam.gserviceaccount.com \
        --role=roles/identitytoolkit.serviceAgent
    

    Substitua:

    • PROJECT_ID: o ID do projeto;
    • PROJECT_NUMBER: o número da conta do projeto

Modos de proteção contra bots do reCAPTCHA

A proteção contra bots do reCAPTCHA tem dois modos que ajudam você a proteger os usuários: auditoria e aplicação. Esses modos têm comportamentos diferentes com base no provedor de identidade.

Provedor de e-mail/senha

Os modos de auditoria e imposição funcionam da seguinte maneira para fluxos de autenticação de e-mail e senha.

Modo de auditoria

Quando você define a aplicação de senha de e-mail no modo de auditoria, o Identity Platform cria uma ou mais chaves reCAPTCHA no seu projeto, que são usadas para avaliar o tráfego para as APIs do Identity Platform sem bloquear nenhuma solicitação. Use as métricas emitidas durante o modo de auditoria para determinar se você deve ativar a aplicação do reCAPTCHA.

Modo de restrição

Quando você define a aplicação de senha por e-mail como "Modo de aplicação", o Identity Platform cria uma ou mais chaves do reCAPTCHA no seu projeto, que são usadas para avaliar o tráfego para as APIs do Identity Platform. As solicitações de API que não incluem um token do reCAPTCHA são rejeitadas. Só ative a aplicação depois de migrar todos os clientes para um SDK com suporte ao reCAPTCHA.

Provedor de serviços telefônicos

Os modos de auditoria e restrição funcionam da seguinte maneira para fluxos de autenticação por smartphone.

Modo de auditoria

Quando você define a restrição da autenticação por smartphone como modo de auditoria, o Identity Platform usa a proteção contra bots do reCAPTCHA para a verificação de apps. Se a solicitação de um usuário for aprovada na avaliação de fraude de cobrança, um código de verificação por SMS será enviado. Se a solicitação de um usuário não passar na avaliação de fraude de cobrança e você estiver usando o SDK de cliente, o Identity Platform vai acionar métodos de verificação alternativos para concluir o fluxo de autenticação por telefone. Os métodos de substituição aceitos dependem da plataforma do app.

O SDK de cliente aciona os métodos de verificação alternativos nos seguintes cenários:

  • O token do reCAPTCHA está faltando.
  • O token do reCAPTCHA é inválido ou expirou.
  • O token reCAPTCHA não atinge o limite de pontuação.
  • O reCAPTCHA não está configurado corretamente.

Verifique se os métodos de verificação alternativos para a plataforma do app estão configurados e prontos para serem acionados pelo SDK do cliente, se necessário.

Web

Se a avaliação inicial de proteção contra bots falhar, o modo de auditoria vai usar o reCAPTCHA v2 para verificação. Portanto, é necessário configurar o verificador reCAPTCHA (RecaptchaVerifier) e transmiti-lo para as seguintes operações de autenticação por telefone:

  • verifyPhoneNumber
  • signInWithPhoneNumber
  • linkWithPhoneNumber
  • reauthenticateWithPhoneNumber
Sem o verificador reCAPTCHA, o Identity Platform não pode iniciar o reCAPTCHA v2 e vai retornar auth/argument-error. Para mais informações sobre a configuração do verificador reCAPTCHA, consulte Configurar o verificador reCAPTCHA na documentação do Firebase.

Android

Se a avaliação inicial de proteção contra bots falhar, o modo de auditoria vai verificar seu app com a API Play Integrity. Se essa verificação falhar, o reCAPTCHA v2 será acionado. O reCAPTCHA v2 pode ser acionado nos seguintes cenários:

  • Se o dispositivo do usuário final não tiver o Google Play Services instalado.
  • Se o app não for distribuído pela Google Play Store (no SDK do Authentication v21.2.0 e versões mais recentes).
  • Se o token SafetyNet recebido não for válido (em versões do SDK do Authentication anteriores à v21.2.0).
Para mais informações sobre como configurar a verificação de apps Android, consulte Ativar a verificação de apps na documentação do Firebase.

iOS

Se a avaliação inicial de proteção contra bots falhar, o modo de auditoria vai usar notificações push silenciosas para verificação. Esse método de verificação envolve o envio de um token ao seu app no dispositivo solicitante com uma notificação push silenciosa. Se o app receber a notificação, o fluxo de autenticação por telefone vai continuar. Se o app não receber a notificação push, o reCAPTCHA v2 será acionado. O reCAPTCHA v2 pode ser acionado se as notificações push silenciosas não estiverem configuradas corretamente.

Para mais informações sobre como configurar a verificação de apps iOS, consulte Ativar a verificação de apps na documentação do Firebase.

Modo de restrição

Quando você define a restrição da autenticação por telefone como "modo restrito", o Identity Platform usa a proteção contra bots do reCAPTCHA para a verificação de apps. Se a solicitação de um usuário for aprovada na avaliação de fraude de cobrança, um código de verificação por SMS será enviado. Se a solicitação de um usuário não passar na avaliação de fraude de cobrança, o Identity Platform vai bloquear a solicitação e não vai enviar uma mensagem SMS com um código de verificação.

Não é necessária uma verificação de substituição no modo de aplicação. Você não precisa configurar nenhum método de verificação adicional para seu app. No entanto, recomendamos configurar o verificador do reCAPTCHA para apps da Web e garantir que o reCAPTCHA v2 esteja ativado se você decidir mudar o modo do reCAPTCHA do app para AUDIT ou OFF.

Configurar a integração do Identity Platform com a API reCAPTCHA Enterprise

Para configurar a integração da Identity Platform com a API reCAPTCHA Enterprise, faça o seguinte:

  • Use o SDK Admin para definir o estado de aplicação do reCAPTCHA e ativar a proteção contra bots.
  • Configure o SDK do cliente para a plataforma do seu app.

Recomendamos que você primeiro ative a aplicação do reCAPTCHA no modo de auditoria e monitore as métricas do reCAPTCHA que seu projeto emite para garantir que os fluxos de autenticação estejam protegidos adequadamente. Isso evita interrupções no tráfego de usuários enquanto você audita o uso do reCAPTCHA. Depois de verificar se os fluxos de autenticação estão protegidos, defina a proteção contra bots como ENFORCE.

Ativar a proteção contra bots do reCAPTCHA

Provedor de e-mail/senha

Para ativar a proteção contra bots do reCAPTCHA em fluxos de autenticação de senha de e-mail, faça o seguinte:

  1. Se você ainda não tiver feito isso, ative a API reCAPTCHA Enterprise no seu projeto.

  2. Para ativar a proteção contra bots em um projeto, use o SDK Admin. O suporte ao reCAPTCHA está disponível nas versões 11.7.0 e mais recentes do SDK Admin para Node.js.

    Exemplo:

    // Update project config with reCAPTCHA config
    const updateConfigRequest = {
      recaptchaConfig: {
        emailPasswordEnforcementState:  'ENFORCE_MODE',
        managedRules: [{
          endScore: END_SCORE,
          action: 'BLOCK'
        }]
      }
    };
    const updateProjectConfigWithRecaptcha = () => {
      getAuth().projectConfigManager().updateProjectConfig(updateConfigRequest).then((response) => {
        console.log('Updated reCAPTCHA config for project: ', response.recaptchaConfig);
      }).catch((error) => {
        console.log('Error updating project config:', error);
      });
    }
    

    Substitua:

    • ENFORCE_MODE: o modo que você quer definir para a aplicação da autenticação por e-mail e senha do reCAPTCHA. Os valores válidos são OFF, AUDIT e ENFORCE. Para ativar a proteção contra bots, esse parâmetro precisa ser definido como AUDIT ou ENFORCE. Quando você ativa a proteção contra bots pela primeira vez, recomendamos definir esse parâmetro como AUDIT e garantir que seus fluxos de autenticação estejam protegidos antes de definir como ENFORCE. Para mais informações sobre como os modos funcionam, consulte Modos de proteção contra bots do reCAPTCHA.
    • END_SCORE: a menor pontuação de avaliação de proteção contra bots que uma solicitação pode ter antes de falhar. Você pode definir essa pontuação entre 0.0 e 1.0. Por exemplo, se você definir um limite de 0.6, o reCAPTCHA vai falhar em qualquer solicitação com um 0.5 ou menos. Portanto, quanto maior a pontuação, mais rígidas serão as regras.

    Você também pode ativar a proteção contra bots com o mesmo método de configuração para um locatário usando o SDK Admin. Para mais informações sobre como atualizar um locatário, consulte Atualizar um locatário.

  3. Se você usa o Identity Platform no iOS ou Android, registre o app no console do Firebase:

    Se você estiver usando o Identity Platform na Web, adicione um domínio autorizado para cada domínio que usa o reCAPTCHA. Para adicionar domínios autorizados, faça o seguinte:

    1. No Google Cloud console, acesse a página do Identity Platform.

      Acesse o Identity Platform

    2. Acesse Configurações > Segurança.

    3. Clique em Adicionar domínio.

    4. Digite o nome do domínio e clique em Adicionar para salvar.

    O provisionamento da chave do reCAPTCHA pode levar vários minutos para ser concluído.

  4. Se você definiu a aplicação para o modo de auditoria, recomendamos monitorar as métricas do reCAPTCHA para proteção contra bots e garantir que seus fluxos estejam protegidos.

Provedor de serviços telefônicos

Para ativar a proteção contra bots do reCAPTCHA em fluxos de autenticação baseados em SMS, faça o seguinte:

  1. Se você ainda não tiver feito isso, ative a API reCAPTCHA Enterprise no seu projeto.

  2. Para ativar a proteção contra bots em um projeto, use o SDK Admin. O suporte ao reCAPTCHA está disponível nas versões 12.7.0 e mais recentes do SDK Admin para Node.js.

    Exemplo:

    // Update project config with reCAPTCHA config
    const updateProjectConfigRequest = {
      recaptchaConfig: {
        phoneEnforcementState: 'ENFORCE_MODE',
        managedRules: [{ endScore: END_SCORE, action: 'BLOCK' }],
        useSmsBotScore: 'true',
      }
    }
    let projectConfig = await getAuth().projectConfigManager().updateProject(updateProjectConfigRequest);
    

    Substitua:

    • ENFORCE_MODE: o modo que você quer definir para a aplicação da autenticação por telefone do reCAPTCHA. Os valores válidos são OFF, AUDIT e ENFORCE. Para ativar a proteção contra bots em fluxos baseados em SMS, esse parâmetro precisa ser definido como AUDIT ou ENFORCE, e useSmsBotScore precisa ser definido como true.

      Ao ativar a proteção contra bots pela primeira vez, recomendamos definir esse parâmetro como AUDIT e garantir que seus fluxos de autenticação estejam protegidos antes de definir como ENFORCE. Para mais informações sobre como os modos funcionam, consulte Modos de proteção contra bots do reCAPTCHA.

    • END_SCORE: a menor pontuação de avaliação de proteção contra bots que uma solicitação pode ter antes de falhar. Você pode definir essa pontuação entre 0.0 e 1.0. Por exemplo, se você definir um limite de 0.6, o reCAPTCHA vai falhar em qualquer solicitação com um 0.5 ou menos. Portanto, quanto maior a pontuação, mais rígidas serão as regras.

    Você também pode ativar a proteção contra bots com o mesmo método de configuração para um locatário usando o SDK Admin. Para mais informações sobre como atualizar um locatário, consulte Atualizar um locatário.

  3. Se você estiver usando o Identity Platform no iOS ou Android, registre o app no Console do Firebase:

    Se você estiver usando o Identity Platform na Web, adicione um domínio autorizado para cada domínio que usa o reCAPTCHA. Para adicionar domínios autorizados, faça o seguinte:

    1. No Google Cloud console, acesse a página do Identity Platform.

      Acesse o Identity Platform

    2. Acesse Configurações > Segurança.

    3. Clique em Adicionar domínio.

    4. Digite o nome do domínio e clique em Adicionar para salvar.

    O provisionamento da chave do reCAPTCHA pode levar vários minutos para ser concluído.

  4. Se você definiu a aplicação para o modo de auditoria, recomendamos monitorar as métricas do reCAPTCHA para proteção contra bots e garantir que seus fluxos estejam protegidos.

Configurar o SDK do cliente

Configure o SDK do cliente de acordo com a plataforma do app.

Web

  1. Atualize para a versão mais recente do SDK da Web.

    • O suporte do reCAPTCHA para autenticação por e-mail e senha em apps da Web está disponível nas versões 9.20.0 e mais recentes do SDK para JavaScript.
    • O suporte do reCAPTCHA para autenticação por telefone em apps da Web está disponível nas versões 11 e mais recentes do SDK para JavaScript.

    Depois de integrar o SDK da Web ao seu app, ele busca automaticamente a configuração do reCAPTCHA e ativa a proteção para os provedores que você configurou.

  2. Se necessário, force a busca do indicador do reCAPTCHA da seguinte forma:

    import { initializeRecaptchaConfig } from '@firebase/auth';
    
    // Initialize Firebase Authentication
    const auth = getAuth();
    initializeRecaptchaConfig(auth)
      .then(() => {
        console.log("Recaptcha Enterprise Config Initialization successful.")
      })
      .catch((error) => {
        console.error("Recaptcha Enterprise Config Initialization failed with " + error)
      });
    

Android

  1. Atualize para a versão mais recente do SDK do Android. O suporte do reCAPTCHA para autenticação por e-mail e senha e autenticação por telefone em apps Android está disponível no SDK do Android versão 23.1.0 e mais recente.

    Além disso, o suporte ao reCAPTCHA exige o nível 23 da API (Marshmallow) ou mais recente e o Android 6 ou mais recente.

    Depois de integrar o SDK do Android ao seu app, ele busca automaticamente a configuração do reCAPTCHA e ativa a proteção para os provedores que você configurou.

  2. Adicione a seguinte regra de build à seção de dependências do arquivo build.gradle no nível do app:

    implementation 'com.google.android.recaptcha:recaptcha:18.5.1'
    

    Use a versão 18.5.1 ou mais recente do SDK do reCAPTCHA.

  3. Se necessário, force a busca do indicador do reCAPTCHA da seguinte forma:

    • Kotlin:
    // Initialize Firebase Authentication
    auth = Firebase.auth
    
    auth.initializeRecaptchaConfig().addOnCompleteListener(this) { task ->
        if (task.isSuccessful) {
            Log.d(TAG, "Recaptcha Enterprise Initialization successful.")
        } else {
            Log.w(TAG, "Recaptcha Enterprise Initialization failed.")
        }
    }
    
    • Java:
    // Initialize Firebase Authentication
    auth = FirebaseAuth.getInstance();
    auth.initializeRecaptchaConfig().addOnCompleteListener(
      this, new OnCompleteListener<void>() {
      @Override
      public void onComplete(@NonNull Task<void> task) {
        if (task.isSuccessful()) {
          Log.d(TAG, "Recaptcha Enterprise Initialization successful.");
        } else {
          Log.w(TAG, "Recaptcha Enterprise Initialization failed.");
        }
      }
    });
    

iOS

  1. Atualize para a versão 11.6.0 ou mais recente do SDK do iOS. Depois de integrar o SDK do iOS ao seu app, ele busca automaticamente a configuração do reCAPTCHA e ativa a proteção para os provedores que você configurou.

  2. Para integrar o SDK do reCAPTCHA para iOS ao seu app, consulte Preparar seu ambiente.

  3. Verifique se -ObjC está listado nos seus sinalizadores do vinculador. Navegue até Destino > Configurações de build > Todos > Vinculação e verifique se Other Linker Flags mostra -ObjC.

  4. Se necessário, force a busca do indicador do reCAPTCHA da seguinte forma:

    • Swift:
    // Initialize Firebase Authentication
    try await Auth.auth().initializeRecaptchaConfig()
    
    • Objective-C:
    // Initialize Firebase Authentication
    [[FIRAuth auth] initializeRecaptchaConfigWithCompletion:^(NSError * _Nullable error) {
      // Firebase Authentication initialization finished
    }];
    

Monitorar métricas do reCAPTCHA para proteção contra bots

Antes de definir o modo de aplicação do reCAPTCHA, recomendamos usar o modo de auditoria e monitorar as métricas que seu projeto emite para garantir que os fluxos de autenticação estejam protegidos. Por exemplo, essas métricas podem ajudar você a determinar se configurou corretamente a integração do Identity Platform com a API reCAPTCHA Enterprise. Eles também podem ajudar a ajustar o limite de pontuação para o tráfego de usuários. Se o provisionamento da chave do reCAPTCHA falhar ou se as contas de serviço necessárias não forem criadas, as tentativas de autenticação do reCAPTCHA ainda serão bem-sucedidas normalmente.

Verifique se a autenticação do reCAPTCHA está funcionando examinando as seguintes métricas que seu projeto emite para o Cloud Monitoring:

Para mais informações, consulte Monitorar métricas do reCAPTCHA.

Aplicar a proteção contra bots do reCAPTCHA

Depois de verificar se o app está recebendo um tráfego de usuários aceitável, ative a aplicação do reCAPTCHA para proteger seus usuários. Não interrompa os usuários atuais, incluindo aqueles que podem estar usando uma versão mais antiga do app.

Provedor de e-mail/senha

Para ativar a aplicação do reCAPTCHA em fluxos de autenticação por e-mail e senha em um projeto ou locatário, use o SDK Admin para executar o seguinte:

const enforceRequest = {
  recaptchaConfig: {
    emailPasswordEnforcementState:  'ENFORCE',
    }]
  }
};

Provedor de serviços telefônicos

Para ativar a aplicação do reCAPTCHA em fluxos de autenticação por SMS em um projeto ou locatário, use o SDK Admin para executar o seguinte:

const enforceRequest = {
  recaptchaConfig: {
    phoneEnforcementState:  'ENFORCE',
    useSmsBotScore: 'true'
    }]
  }
};

Desativar a proteção contra bots do reCAPTCHA

Provedor de e-mail/senha

Para desativar a proteção contra bots nos fluxos de autenticação por e-mail e senha, use o SDK Admin para executar o seguinte comando:

const disableRequest = {
  recaptchaConfig: {
    emailPasswordEnforcementState:  'OFF',
  }
};

Provedor de serviços telefônicos

Para desativar a proteção contra bots em fluxos de autenticação baseados em SMS, use o SDK Admin para executar o seguinte comando:

const disableRequest = {
  recaptchaConfig: {
    phoneEnforcementState:  'OFF',
    useSmsBotScore: 'false'
  }
};

Substituir vereditos do reCAPTCHA com o Cloud Run functions

Além de configurar limites de pontuação, é possível substituir um veredito do reCAPTCHA para um determinado token usando uma função de bloqueio personalizada do Cloud Run functions. Isso é útil em casos em que a pontuação do reCAPTCHA para um determinado login de usuário pode ser baixa, mas o usuário é confiável ou foi verificado por outros meios e, portanto, pode concluir o login.

Para saber mais sobre como configurar funções de bloqueio com o reCAPTCHA, consulte Ampliar o Firebase Authentication com funções do Cloud de bloqueio.

A seguir