Integrar com o Google Cloud Armor para aplicativos móveis

Este documento mostra como integrar os recursos WAF do reCAPTCHA Enterprise ao Google Cloud Armor em apps para dispositivos móveis.

Para concluir a integração, implemente um ou mais recursos do reCAPTCHA Enterprise para WAF e configure as políticas de segurança do Google Cloud Armor. No entanto, só é possível implementar tokens de ação reCAPTCHA para integração com o Google Cloud Armor em aplicativos para dispositivos móveis.

Antes de começar

  1. Ative a API reCAPTCHA Enterprise.

    Ative a API

  2. Identifique as ações que você quer proteger.

Implementar tokens de ação reCAPTCHA

Para gerar tokens de ação, é necessário executar o reCAPTCHA Enterprise no seu aplicativo para dispositivos móveis. Depois que o reCAPTCHA Enterprise gera um token de ação, anexe-o a um cabeçalho de solicitação predefinido sempre que for necessário proteger qualquer ação do usuário, como checkout. Por padrão, os tokens de ação são válidos por 30 minutos, mas podem variar de acordo com o tráfego. Anexe o token de ação a um cabeçalho de solicitação predefinido antes que o token expire para que o Google Cloud Armor possa avaliar os atributos do token.

Para implementar um token de ação reCAPTCHA, faça o seguinte:

  1. Crie uma chave de token de ação para seu aplicativo para dispositivos móveis.

    Console

    1. No console do Google Cloud, acesse a página reCAPTCHA Enterprise.

      Acessar o reCAPTCHA Enterprise

    2. Verifique se o nome do projeto aparece no seletor de recursos, na parte superior da página.

      Se você não vir o nome do projeto, clique no seletor de recursos para selecioná-lo.

    3. Clique em Criar chave.

    4. No campo Nome de exibição, insira um nome de exibição para a chave.
    5. Dependendo do tipo de aplicativo para o qual você quer criar as chaves reCAPTCHA para WAF, execute a ação adequada:
    6. Criar chaves reCAPTCHA para WAF para aplicativos iOS

      Recomendamos criar uma chave reCAPTCHA por aplicativo iOS.

      1. No menu Escolher tipo de plataforma, selecione App iOS.
        1. Na seção Lista de ID do pacote do iOS, clique em Adicionar ID do pacote do iOS.
        2. No campo ID do pacote, insira o nome do ID do pacote do iOS.

        3. Opcional: para adicionar outro ID do pacote, clique em Adicionar ID do pacote iOS e insira o nome no campo ID do pacote.
        4. Opcional: defina as Configurações do desenvolvedor da Apple.

          Recomendamos que você forneça esses dados porque eles permitem que o reCAPTCHA Enterprise forneça pontuações de risco mais precisas para seu tráfego.

          Digite as seguintes informações:

          • Chave privada (.p8): gerada no Apple Centro para Desenvolvedores, em "Certificates, Identifiers & Profiles".
          • Identificador de chave: é o identificador de chave de desenvolvedor da Apple (string de 10 caracteres).
          • ID da equipe: o ID da equipe da Apple (string de 10 caracteres) que tem o perfil de provisionamento usado para criar o aplicativo.
        5. Expanda Verificação verificação por documento de identidade e tipo de chave.
          1. Para criar uma chave reCAPTCHA para WAF, faça o seguinte:
            1. Ative o firewall de aplicativos da Web (WAF).
            2. No menu Serviço, selecione Cloud Armor.
            3. No menu Recurso, selecione Token de ação.
          2. Para proteger a chave reCAPTCHA dos seus IDs de pacote, verifique se a opção Desativar verificação de ID do pacote está desativada.
          3. Para o ambiente de não produção, se você quiser especificar uma pontuação que quer que a chave retorne quando qualquer avaliação for criada para ele, faça o seguinte:

            1. Clique no botão de alternância This is a Testing key.
            2. Na caixa Score, especifique uma pontuação entre 0 e 1,0.
        6. Clique em Criar chave.
        7. A chave recém-criada é listada na página Chaves reCAPTCHA.

      Criar chaves reCAPTCHA para WAF para apps Android

      1. No menu Choose platform type, selecione Android app.
      2. Na seção Lista de pacote do Android, clique em Adicionar pacote do Android.
      3. No campo pacote do Android, insira o nome do pacote do Android.

      4. (Opcional) Para incluir outro pacote, clique em Adicionar pacote do Android e digite o nome de outro pacote no campo Pacote do Android.
      5. Expanda Verificação de nome de pacote, distribuição de apps e chaves de teste.
        1. Para criar uma chave reCAPTCHA para WAF, faça o seguinte:
          1. Ative o firewall de aplicativos da Web (WAF).
          2. No menu Serviço, selecione Cloud Armor.
          3. No menu Recurso, selecione Token de ação.
        2. Para garantir que a chave reCAPTCHA seja usada apenas no seu app, desative a opção Desativar verificação do nome do pacote.
        3. Se você quiser criar uma chave para um aplicativo disponível em outras app stores além da Google Play Store, ative a opção Suporte a aplicativos distribuídos fora da Google Play Store.
        4. Para o ambiente de não produção, se você quiser especificar uma pontuação que quer que a chave retorne quando qualquer avaliação for criada para ele, faça o seguinte:

          1. Clique no botão de alternância This is a Testing key.
          2. Na caixa Score, especifique uma pontuação entre 0 e 1,0.
      6. Clique em Criar chave.
      7. A chave recém-criada é listada na página Chaves reCAPTCHA.

    gcloud (iOS)

    Para criar chaves reCAPTCHA, use o comando gcloud recaptchakeys create.

    Antes de usar os dados do comando abaixo, faça estas substituições:

    • DISPLAY_NAME: nome da chave. Geralmente, um nome de site.
    • BUNDLE_IDs: os IDs do pacote de apps iOS autorizados a usar a chave. Para especificar vários IDs de pacote, use um formato de lista separada por vírgulas.
    • WAF_FEATURE: nome do recurso WAF. Especifique action-token.
    • WAF_SERVICE: nome do provedor de serviços WAF. Especifique CA para o Google Cloud Armor.

    Execute o comando gcloud recaptchakeys create:

    Linux, macOS ou Cloud Shell

    
    gcloud recaptcha keys create \
    --display-name=DISPLAY_NAME  \
    --ios --bundle-ids=BUNDLE_IDs \
    --waf-feature=WAF_FEATURE \
    --waf-service=WAF_SERVICE
    

    Windows (PowerShell)

    
    gcloud recaptcha keys create `
    --display-name=DISPLAY_NAME  `
    --ios --bundle-ids=BUNDLE_IDs `
    --waf-feature=WAF_FEATURE `
    --waf-service=WAF_SERVICE
    

    Windows (cmd.exe)

    
    gcloud recaptcha keys create ^
    --display-name=DISPLAY_NAME  ^
    --ios --bundle-ids=BUNDLE_IDs ^
    --waf-feature=WAF_FEATURE ^
    --waf-service=WAF_SERVICE
    

    A resposta contém a chave reCAPTCHA recém-criada.

    gcloud (Android)

    Para criar chaves reCAPTCHA, use o comando gcloud recaptchakeys create.

    Antes de usar os dados do comando abaixo, faça estas substituições:

    • DISPLAY_NAME: nome da chave. Geralmente, um nome de site.
    • PACKAGE_NAMES: nomes de pacotes Android de apps em que a chave pode ser usada. Para especificar vários nomes de pacotes, use um formato de lista separada por vírgulas.
    • WAF_FEATURE: nome do recurso WAF. Especifique action-token.
    • WAF_SERVICE: nome do provedor de serviços WAF. Especifique CA para o Google Cloud Armor.

    Execute o comando gcloud recaptchakeys create:

    Linux, macOS ou Cloud Shell

    
    gcloud recaptcha keys create \
    --display-name=DISPLAY_NAME  \
    --android --package-names=PACKAGE_NAMES \
    --waf-feature=WAF_FEATURE \
    --waf-service=WAF_SERVICE
    
    

    Windows (PowerShell)

    
    gcloud recaptcha keys create `
    --display-name=DISPLAY_NAME  `
    --android --package-names=PACKAGE_NAMES `
    --waf-feature=WAF_FEATURE `
    --waf-service=WAF_SERVICE
    
    

    Windows (cmd.exe)

    
    gcloud recaptcha keys create ^
    --display-name=DISPLAY_NAME  ^
    --android --package-names=PACKAGE_NAMES ^
    --waf-feature=WAF_FEATURE ^
    --waf-service=WAF_SERVICE
    
    

    A resposta contém a chave reCAPTCHA recém-criada.

    REST (iOS)

    Antes de usar os dados da solicitação, faça as substituições a seguir:

    • DISPLAY_NAME: nome da chave. Geralmente, o nome de um app.
    • BUNDLE_IDs: os IDs do pacote de apps iOS autorizados a usar a chave. Para especificar vários IDs de pacote, use um formato de lista separada por vírgulas.
    • WAF_FEATURE: nome do recurso WAF. Especifique action-token.
    • WAF_SERVICE: nome do provedor de serviços WAF. Especifique CA para o Google Cloud Armor.

    Método HTTP e URL:

    POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys

    Corpo JSON da solicitação:

    {
      "displayName": "DISPLAY_NAME",
      "iosSettings": {
     "allowedBundleIds": "BUNDLE_IDS"
     },
       'wafSettings': "  {
           "wafService": "CA",
     "wafFeature": "ACTION_TOKEN"
      }
     }
    
    

    Para enviar a solicitação, escolha uma destas opções:

    curl

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys"

    PowerShell

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys" | Select-Object -Expand Content

    Você receberá uma resposta JSON semelhante a esta:

    
    {
      "name": "projects/project-id/keys/6LfhtywnAAAAABY3sCS2duZ6A55kmDXz-PNEgKgT",
      "displayName": "DISPLAY_NAME",
      "iosSettings": {
        "allowAllBundleIds": false,
        "allowedBundleIds": [
            BUNDLE_IDS
        ]
      },
      "labels": {},
      "wafSettings": {
          "wafService": "CA",
          "wafFeature": "ACTION_TOKEN"
      }
    }
    
    

    REST (Android)

    Antes de usar os dados da solicitação, faça as substituições a seguir:

    • DISPLAY_NAME: nome da chave. Geralmente, o nome de um app.
    • PACKAGE_NAMES: nomes de pacotes Android de apps em que a chave pode ser usada. Para especificar vários nomes de pacotes, use um formato de lista separada por vírgulas.
    • WAF_FEATURE: nome do recurso WAF. Especifique action-token.
    • WAF_SERVICE: nome do provedor de serviços WAF. Especifique CA para o Google Cloud Armor.

    Método HTTP e URL:

    POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys

    Corpo JSON da solicitação:

    {
      "displayName": "DISPLAY_NAME",
      "androidSettings": {
      "allowedPackageNames":"PACKAGE_NAMES"
     },
       'wafSettings': "  {
           "wafService": "CA",
     "wafFeature": "ACTION_TOKEN"
      }
     }
    
    

    Para enviar a solicitação, escolha uma destas opções:

    curl

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys"

    PowerShell

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys" | Select-Object -Expand Content

    Você receberá uma resposta JSON semelhante a esta:

    
    {
      "name": "projects/project-id/keys/6LcioSknAAAAABrjlMuZv2fjIGYMqwaAFC9izhoy",
      "displayName": "DISPLAY_NAME",
      "androidSettings": {
          "allowAllPackageNames": false,
          "allowedPackageNames": [
              PACKAGE_NAMES
          ],
          "supportNonGoogleAppStoreDistribution": false
      },
      "labels": {},
      "wafSettings": {
          "wafService": "CA",
          "wafFeature": "ACTION_TOKEN"
      }
    }
    
    

  2. Integre o SDK para dispositivos móveis do reCAPTCHA Enterprise aos seus aplicativos para dispositivos móveis com a chave de token de ação que você criou. Para obter instruções, consulte o documento que corresponde ao tipo de seu aplicativo móvel.

  3. Depois de receber o token do reCAPTCHA Enterprise, anexe-o a um cabeçalho de solicitação predefinido no seguinte formato:

    X-Recaptcha-Token: value-of-your-action-token
    

    O exemplo de código a seguir mostra como anexar o token:

    Android

    Exemplo de código em Java

    
    // This example shows how to send an HTTP request to the backend server
    // attached with the reCAPTCHA token in the header.
    //
    // @param serverUrl: the URL of the backend server.
    // @param rceToken: reCAPTCHA token that is attached to the header of the
    // HTTP request.
    
    public static void sendRequestToServerWithRceToken(
        String serverUrl, String rceToken) throws JSONException, IOException {
     URL url = new URL(String.format("http://%s/decryptcaptchacookie/accesswafserver", serverUrl));
     HttpURLConnection connection = (HttpURLConnection) url.openConnection();
     connection.setRequestProperty("X-Recaptcha-Token", rceToken);
    
     try {
        String requestBody = "['']";
        sendRequest(connection, requestBody, "AccessWithRceToken", "GET");
     } finally {
        connection.disconnect();
     }
    }
    
    private static void sendRequest(
        HttpURLConnection connection, String requestString, String requestName, String action)
        throws IOException {
     connection.setConnectTimeout(HTTP_CONNECT_TIMEOUT_MS);
     connection.setReadTimeout(HTTP_READ_TIMEOUT_MS);
     connection.setRequestProperty("Content-type", CONTENT_TYPE);
     connection.setRequestProperty(
        "Content-Length", Integer.toString(Utf8.encodedLength(requestString)));
     connection.setRequestMethod(action);
     connection.setDoOutput(true);
     connection.connect();
     try (OutputStream postStream = connection.getOutputStream()) {
        postStream.write(requestString.getBytes(UTF_8));
     }
    
     int responseCode = connection.getResponseCode();
     String response = connection.getResponseMessage();
     if (responseCode != HttpURLConnection.HTTP_OK) {
        throw new IOException(
           String.format(
              "Failed to complete request.\nResponse code:%s\nError Detail:\n%s",
              responseCode, response));
     }
    }
    
    

    iOS

    Exemplo de código em Swift

    
    // This example shows how to send an HTTP request to the backend server
    // attached with the reCAPTCHA token in the header.
    // @param serverUrl: the URL of the backend server.
    // @param rceToken: reCAPTCHA token that is attached to the header of
    // the HTTP request.
    
     public static func accessWafServer(rceToken: String, serverUrl: String)
        async throws -> String
     {
        let requestURL = try HttpHelper.createRequestURL(endpoint: serverUrl)
        var request = try HttpHelper.createRequest(requestURL: requestURL, action: "GET")
        request.setValue(rceToken, forHTTPHeaderField: "X-Recaptcha-Token")
    
        let data = try await HttpHelper.getDataFromServer(request)
    
        return String(decoding: data, as: UTF8.self)
     }
    
    

Configurar políticas de segurança do Google Cloud Armor

Depois de implementar os recursos do reCAPTCHA Enterprise para WAF, é necessário configurar as políticas de segurança do Google Cloud Armor que avaliam os tokens reCAPTCHA Enterprise para gerenciamento de bots.

Para saber como configurar políticas de segurança do Google Cloud Armor e usar as chaves de token de ação com suas políticas de segurança, consulte Configurar regras para gerenciamento de bots.

A seguir