Integra en Google Cloud Armor para las aplicaciones para dispositivos móviles

En este documento, se muestra cómo integrar las funciones de WAF de reCAPTCHA con Google Cloud Armor en aplicaciones para dispositivos móviles.

Con el objetivo de completar la integración, debes implementar una o más funciones de reCAPTCHA para WAF y configurar las políticas de seguridad de Google Cloud Armor. Sin embargo, solo puedes implementar tokens de acción de reCAPTCHA a fin de integrarse con Google Cloud Armor en aplicaciones para dispositivos móviles.

Antes de comenzar

  1. Habilita la API de reCAPTCHA.

    Habilita la API

  2. Identifica las acciones que deseas proteger.

Implementa tokens de acción de reCAPTCHA

Debes tener reCAPTCHA en ejecución en tu aplicación para dispositivos móviles a fin de generar tokens de acción. Después de que reCAPTCHA genere un token de acción, debes adjuntarlo a un encabezado de solicitud predefinido cuando necesites proteger cualquier acción del usuario, como checkout. De forma predeterminada, los tokens de acción son válidos por 30 minutos, pero pueden variar según el tráfico. Debes adjuntar el token de acción a un encabezado de solicitud predefinido antes de que caduque el token para que Google Cloud Armor pueda evaluar los atributos del token.

Para implementar un token de acción de reCAPTCHA, haz lo siguiente:

  1. Crea una clave de token de acción para tu aplicación para dispositivos móviles.

    Console

    1. En la consola de Google Cloud, ve a la página reCAPTCHA.

      Ir a reCAPTCHA

    2. Verifica que el nombre de tu proyecto aparezca en el selector de recursos en la parte superior de la página.

      Si no ves el nombre de tu proyecto, haz clic en el selector de recursos y, luego, elige tu proyecto.

    3. Haz clic en Crear clave.

    4. En el campo Nombre visible, ingresa un nombre visible para la clave.
    5. Según el tipo de aplicación para la que desees crear las claves de reCAPTCHA para WAF, realiza la acción correspondiente:
    6. Crea claves reCAPTCHA para WAF destinadas a aplicaciones para iOS

      Recomendamos crear una clave de reCAPTCHA por aplicación para iOS.

      1. En el menú Choose platform type, selecciona iOS app.
        1. En la sección Lista de ID del paquete de iOS, haz clic en Agregar ID del paquete de iOS.
        2. En el campo ID del paquete, ingresa el nombre del ID del paquete de iOS.

        3. Opcional: Para agregar un ID del paquete adicional, haz clic en Add iOS bundle ID y, luego, ingresa el nombre del ID del paquete de iOS en el campo Bundle ID.
        4. Opcional: Proporciona la configuración para desarrolladores de Apple.

          Te recomendamos que proporciones estos datos porque permiten que reCAPTCHA proporcione puntuaciones de riesgo más precisas para tu tráfico.

          Ingresa la siguiente información:

          • Clave privada (.p8): Se genera en el Apple Developer Center, en la sección Certificados, identificadores y perfiles.
          • Identificador de clave: Es el identificador de clave de desarrollador de Apple (string de 10 caracteres).
          • ID de equipo: Es el ID del equipo de Apple (string de 10 caracteres) que posee el perfil de aprovisionamiento que se usa para compilar tu aplicación.
        5. Expande Tipo de clave y verificación de ID del paquete.
          1. Si quieres crear una clave de reCAPTCHA para WAF, haz lo siguiente:
            1. Activa el botón de activación Firewall de aplicación web (WAF).
            2. En el menú Servicio, selecciona Cloud Armor.
            3. En el menú Feature, selecciona Action token.
          2. Para proteger la clave reCAPTCHA de los IDs del paquete, asegúrate de que el botón de activación Inhabilitar la verificación del ID del paquete esté desactivado.
          3. En el caso de tu entorno que no es de producción, si deseas especificar una puntuación que quieres que muestre la clave cuando se cree una evaluación para él, haz lo siguiente:

            1. Haz clic en el botón de activación Esta es una clave de prueba.
            2. En el cuadro Puntuación, especifica una puntuación entre 0 y 1.0.
        6. Haz clic en Crear clave.
        7. La clave nueva aparecerá en la página Claves de reCAPTCHA.

      Crea claves de reCAPTCHA para WAF en aplicaciones para Android

      1. En el menú Choose platform type, selecciona Android app.
      2. En la sección Lista de paquetes de Android, haz clic en Agregar paquete de Android.
      3. En el campo Paquete de Android, ingresa el nombre de tu paquete de Android.

      4. Opcional: Para agregar un paquete adicional, haz clic en Agregar paquete de Android e ingresa el nombre de otro paquete de Android en el campo Paquete de Android.
      5. Expande Verificación de nombres de paquetes, distribución de apps y claves de prueba.
        1. Si quieres crear una clave de reCAPTCHA para WAF, haz lo siguiente:
          1. Activa el botón de activación Firewall de aplicación web (WAF).
          2. En el menú Servicio, selecciona Cloud Armor.
          3. En el menú Feature, selecciona Action token.
        2. Para aplicar de manera forzosa que la clave reCAPTCHA solo se use dentro de tu app, desactiva el botón de activación Inhabilitar la verificación del nombre del paquete.
        3. Si deseas crear una clave para una aplicación que está disponible en otras tiendas de aplicaciones además de Google Play Store, activa Admitir aplicaciones distribuidas fuera de Google Play Store.
        4. En el caso de tu entorno que no es de producción, si deseas especificar una puntuación que quieres que muestre la clave cuando se cree una evaluación para él, haz lo siguiente:

          1. Haz clic en el botón de activación Esta es una clave de prueba.
          2. En el cuadro Puntuación, especifica una puntuación entre 0 y 1.0.
      6. Haz clic en Crear clave.
      7. La clave nueva aparecerá en la página Claves de reCAPTCHA.

    gcloud (iOS)

    Para crear claves de reCAPTCHA, usa el comando gcloud recaptcha keys create.

    Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

    • DISPLAY_NAME: Es el nombre de la clave. Por lo general, es el nombre de un sitio.
    • BUNDLE_IDs: Son los ID de los paquetes de iOS de las apps que pueden usar la clave. Especifica varios IDs de paquete como una lista separada por comas.
    • WAF_FEATURE: Es el nombre de la función de WAF. Especifica action-token.
    • WAF_SERVICE: Es el nombre del proveedor de servicios de WAF. Especifica CA para Google Cloud Armor.

    Ejecuta el comando gcloud recaptcha keys create:

    Linux, macOS o 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 
    

    La respuesta contiene la clave de reCAPTCHA recién creada.

    gcloud (Android)

    Para crear claves de reCAPTCHA, usa el comando gcloud recaptcha keys create.

    Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

    • DISPLAY_NAME: Es el nombre de la clave. Por lo general, es el nombre de un sitio.
    • PACKAGE_NAMES: Son los nombres de paquetes de Android de las apps que tienen permitido usar la clave. Especifica varios nombres de paquetes en una lista separada por comas.
    • WAF_FEATURE: Es el nombre de la función de WAF. Especifica action-token.
    • WAF_SERVICE: Es el nombre del proveedor de servicios de WAF. Especifica CA para Google Cloud Armor.

    Ejecuta el comando gcloud recaptcha keys create:

    Linux, macOS o 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 
    
    

    La respuesta contiene la clave de reCAPTCHA recién creada.

    REST (iOS)

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • DISPLAY_NAME: Es el nombre de la clave. Por lo general, es el nombre de una app.
    • BUNDLE_IDs: Son los ID de los paquetes de iOS de las apps que pueden usar la clave. Especifica varios IDs de paquete como una lista separada por comas.
    • WAF_FEATURE: Es el nombre de la función de WAF. Especifica action-token.
    • WAF_SERVICE: Es el nombre del proveedor de servicios de WAF. Especifica CA para Google Cloud Armor.

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

    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

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

    $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

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    
    {
      "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 cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • DISPLAY_NAME: Es el nombre de la clave. Por lo general, es el nombre de una app.
    • PACKAGE_NAMES: Son los nombres de paquetes de Android de las apps que tienen permitido usar la clave. Especifica varios nombres de paquetes en una lista separada por comas.
    • WAF_FEATURE: Es el nombre de la función de WAF. Especifica action-token.
    • WAF_SERVICE: Es el nombre del proveedor de servicios de WAF. Especifica CA para Google Cloud Armor.

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

    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

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

    $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

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    
    {
      "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. Integra el SDK de reCAPTCHA Enterprise para dispositivos móviles en tus aplicaciones para dispositivos móviles con la clave de token de acción que creaste. Para obtener instrucciones, consulta el documento que corresponda al tipo de tu aplicación móvil.

  3. Después de recibir el token de reCAPTCHA, adjúntalo a un encabezado de solicitud predefinido en el siguiente formato:

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

    En el siguiente código de muestra, se muestra cómo adjuntar el token:

    Android

    Código de muestra en 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

    Código de muestra en 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)
     }
    
    

Configura las políticas de seguridad de Google Cloud Armor

Después de implementar las funciones de reCAPTCHA para WAF, debes configurar las políticas de seguridad de Google Cloud Armor que evalúe los tokens de reCAPTCHA para la administración de bots.

Para obtener información sobre cómo configurar las políticas de seguridad de Google Cloud Armor y usar las claves de token de acción con tus políticas de seguridad, consulta Configura reglas para la administración de bots.

¿Qué sigue?