En este documento, se muestra cómo integrar las funciones del WAF de reCAPTCHA con Google Cloud Armor en aplicaciones para dispositivos móviles.
Para 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 para la integración con Google Cloud Armor en aplicaciones para dispositivos móviles.
Antes de comenzar
Habilita la API de reCAPTCHA Enterprise.
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 para generar tokens de acción.
Después de que reCAPTCHA genera un token de acción, lo adjuntas a un encabezado de solicitud predefinido donde necesites proteger cualquier acción del usuario, como checkout
. De forma predeterminada, los tokens de acción son válidos durante 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 venza 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:
Crea una clave de token de acción para tu aplicación para dispositivos móviles.
Console
En la consola de Google Cloud , ve a la página reCAPTCHA.
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, selecciona tu proyecto.
- Haz clic en Crear clave.
- En el campo Nombre visible, ingresa un nombre visible para la clave.
- Según el tipo de aplicación para la que deseas crear las claves de reCAPTCHA para el WAF, realiza la acción correspondiente:
- En Tipo de aplicación, selecciona iOS.
- En la sección Lista de IDs del paquete de iOS, haz clic en Agregar ID del paquete de iOS.
En el campo ID del paquete, ingresa el nombre del ID del paquete de iOS.
- Opcional: Para agregar un ID del paquete adicional, haz clic en Agregar ID del paquete de iOS e ingresa el nombre del ID del paquete de iOS en el campo ID del paquete.
- Para proteger la clave de reCAPTCHA de tus IDs de paquete, asegúrate de que el botón de activación Inhabilitar verificación de ID del paquete esté desactivado.
Opcional: Proporciona la configuración para desarrolladores de Apple.
Te recomendamos que proporciones estos datos, ya que 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 Certificates, Identifiers & Profiles.
- Identificador de clave: Es el identificador de la clave de desarrollador de Apple (cadena de 10 caracteres).
- ID de equipo: Es el ID de equipo de Apple (cadena de 10 caracteres) que posee el perfil de aprovisionamiento que se usa para compilar tu aplicación.
- Opcional: Haz clic en Siguiente paso (opcional).
- Para crear una clave de reCAPTCHA para el WAF, haz lo siguiente:
- En Configuración adicional, activa la
- En Configuración adicional, activa el botón de activación ¿Implementarás esta clave en un firewall de aplicación web (WAF)?.
- En las opciones de Servicio, selecciona Cloud Armor.
- En las opciones de Feature, selecciona Action.
-
Para tu entorno que no es de producción, si quieres especificar una puntuación que deseas que devuelva la clave cuando se creen evaluaciones para ella, haz lo siguiente:
- En Configuración adicional, haz clic en el botón de activación ¿Estás creando esta clave solo con fines de prueba?.
- Usa el control deslizante Establecer puntuación para especificar una puntuación entre 0 y 1.0.
- Haz clic en Crear clave.
- En Tipo de aplicación, selecciona Android.
- En la sección Lista de paquetes de Android, haz clic en Agregar paquete de Android.
- En el campo Paquete de Android, ingresa el nombre de tu paquete de Android.
- 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.
- Para aplicar que la clave de reCAPTCHA solo se use dentro de tu app, desactiva el botón de activación Inhabilitar la verificación del nombre del paquete.
- 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.
- Opcional: Haz clic en Siguiente paso (opcional).
- Para crear una clave de reCAPTCHA para el WAF, haz lo siguiente:
- En Configuración adicional, activa la
- En Configuración adicional, activa el botón de activación ¿Implementarás esta clave en un firewall de aplicación web (WAF)?.
- En las opciones de Servicio, selecciona Cloud Armor.
- En las opciones de Feature, selecciona Action.
-
Para tu entorno que no es de producción, si quieres especificar una puntuación que deseas que devuelva la clave cuando se creen evaluaciones para ella, haz lo siguiente:
- En Configuración adicional, haz clic en el botón de activación ¿Estás creando esta clave solo con fines de prueba?.
- Usa el control deslizante Establecer puntuación para especificar una puntuación entre 0 y 1.0.
- Haz clic en Crear clave.
Crea claves de reCAPTCHA para el WAF para aplicaciones para iOS
Te recomendamos que crees una clave de reCAPTCHA por aplicación para iOS.
La clave recién creada aparece en la página Claves de reCAPTCHA.
Crea claves de reCAPTCHA para el WAF para aplicaciones de Android
La clave recién creada aparece 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, realiza los siguientes reemplazos:
- DISPLAY_NAME: Nombre de la clave. Por lo general, es el nombre del sitio.
- BUNDLE_IDs: IDs de paquete 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 del WAF.
Especifica
action-token
. - WAF_SERVICE: Nombre del proveedor de servicios del 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, realiza los siguientes reemplazos:
- DISPLAY_NAME: Nombre de la clave. Por lo general, es el nombre de un sitio.
- PACKAGE_NAMES: Nombres de paquetes de Android de las apps que pueden usar la clave. Especifica varios nombres de paquetes como una lista separada por comas.
- WAF_FEATURE: Es el nombre de la función del WAF.
Especifica
action-token
. - WAF_SERVICE: Nombre del proveedor de servicios del 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: Nombre de la clave. Por lo general, es el nombre de una app.
- BUNDLE_IDs: IDs de paquete 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 del WAF.
Especifica
action-token
. - WAF_SERVICE: Nombre del proveedor de servicios del 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 ContentDeberí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: Nombre de la clave. Por lo general, es el nombre de una app.
- PACKAGE_NAMES: Nombres de paquetes de Android de las apps que pueden usar la clave. Especifica varios nombres de paquetes como una lista separada por comas.
- WAF_FEATURE: Es el nombre de la función del WAF.
Especifica
action-token
. - WAF_SERVICE: Nombre del proveedor de servicios del 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 ContentDeberí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" } }
Integra el SDK de reCAPTCHA 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 corresponde al tipo de tu aplicación para dispositivos móviles.
- En el caso de Android, consulta Cómo integrar claves de WAF en aplicaciones para Android.
- En el caso de iOS, consulta Cómo integrar claves de WAF en aplicaciones para iOS.
Después de recibir el token de reCAPTCHA, adjúntalo a un encabezado de solicitud predefinido con el siguiente formato:
X-Recaptcha-Token: value-of-your-action-token
En el siguiente ejemplo de código, 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 políticas de seguridad de Google Cloud Armor que evalúen los tokens de reCAPTCHA para la administración de bots.
Si deseas obtener información para configurar las políticas de seguridad de Google Cloud Armor y usar las claves de action-token con tus políticas de seguridad, consulta Configura reglas para la administración de bots.
Obtén las puntuaciones de reCAPTCHA
En el caso de los tokens de acción de reCAPTCHA, puedes obtener las puntuaciones de reCAPTCHA desde el encabezado X-Recaptcha-Wafdata
.
En función de estas puntuaciones, puedes configurar cualquier acción personalizada que deba realizarse para las solicitudes de los usuarios.
En el siguiente ejemplo, se muestra un encabezado X-Recaptcha-Wafdata
de muestra:
X-Recaptcha-Wafdata: waf_service="Google Cloud Armor", action_token;score=0.9\r\n
También puedes ver las puntuaciones de reCAPTCHA en los registros de Google Cloud Armor.