Detectar y prevenir actividades fraudulentas relacionadas con cuentas en sitios web

En este documento se explica cómo usar reCAPTCHA Account Defender para detectar y evitar actividades fraudulentas relacionadas con cuentas en sitios web.

reCAPTCHA te ayuda a proteger acciones críticas, como el inicio de sesión y la tramitación de compras. Sin embargo, hay muchas formas sutiles de abuso de cuentas que se pueden detectar observando el comportamiento de un usuario específico en un sitio web durante un periodo. reCAPTCHA Account Defender ayuda a identificar este tipo de abuso sutil creando un modelo específico para tu sitio web que detecte una tendencia de comportamiento sospechoso o un cambio en la actividad. Al usar el modelo específico del sitio, Account Defender de reCAPTCHA te ayuda a detectar lo siguiente:

  • Actividades sospechosas
  • Cuentas con comportamientos similares
  • Solicitudes procedentes de dispositivos que se han marcado como de confianza para usuarios concretos

Según el análisis de Account Defender de reCAPTCHA y el modelo específico del sitio, puedes tomar las siguientes medidas:

  • Restringir o inhabilitar cuentas fraudulentas.
  • Evita los intentos de apropiación fraudulenta de cuentas.
  • Mitigar los robos de cuentas que se hayan completado.
  • Concede acceso solo a las solicitudes procedentes de cuentas de usuario legítimas.
  • Reduce la fricción para los usuarios que inician sesión desde uno de sus dispositivos de confianza.

Antes de empezar

  1. Prepara tu entorno para reCAPTCHA.
  2. Crea una clave de sitio basada en puntuación.

Configurar las páginas web para reCAPTCHA Account Defender

reCAPTCHA Account Defender requiere una comprensión exhaustiva de las actividades de las cuentas para poder detectar las amenazas de forma eficaz. Para empezar a enviar actividades relacionadas con cuentas a reCAPTCHA Account Defender y crear y mejorar tu modelo específico del sitio, haz lo siguiente:

  1. Habilite la recogida de datos de telemetría horizontales.
  2. Generar informes sobre acciones de usuario críticas.
  3. Evalúa los eventos de usuario críticos.
  4. Anota los eventos de usuario para optimizar tu modelo específico del sitio.

Habilitar la recogida de datos de telemetría horizontales

reCAPTCHA Account Defender requiere una vista completa de las acciones de los usuarios, como si han iniciado sesión o si se les va a redirigir para que lo hagan. Para habilitar la recogida pasiva de datos de telemetría horizontal por parte de Account Defender de reCAPTCHA, carga la secuencia de comandos JavaScript de reCAPTCHA con la clave de sitio basada en puntuación que has creado en segundo plano en todas las páginas web que forman parte del flujo de trabajo de tus usuarios.

En el siguiente ejemplo se muestra cómo cargar la secuencia de comandos JavaScript de reCAPTCHA en una página web.

    <head>
    <script src="https://www.google.com/recaptcha/enterprise.js?render=KEY_ID"></script>
    ....
    </head>

Generar informes sobre acciones de usuario críticas

Para detectar patrones de actividad sospechosa y comprender mejor los patrones de actividad típicos de tu sitio, reCAPTCHA Account Defender necesita información sobre las acciones críticas de los usuarios. Por lo tanto, informa de las acciones críticas de los usuarios en las páginas web llamando a grecaptcha.enterprise.execute() en esas acciones críticas.

Te recomendamos que registres todas las acciones críticas de los usuarios, ya que esto ayuda a recoger señales adicionales. Por cada acción de usuario que quiera registrar, sustituya el valor del parámetro action de grecaptcha.enterprise.execute() por el nombre de la acción de usuario.

En la siguiente tabla se indican los nombres de las acciones que puede usar al informar de las acciones críticas de los usuarios.

Nombre de la acción Evento iniciado por el usuario o acción del usuario
LOGIN

Inicia sesión en el sitio web.

REGISTRATION Registro en el sitio web.
SECURITY_QUESTION_CHANGE Solicitud para cambiar la pregunta de seguridad.
PASSWORD_RESET Solicita restablecer la contraseña.
PHONE_NUMBER_UPDATE Solicitud para actualizar el número de teléfono.
EMAIL_UPDATE Solicitud para actualizar la dirección de correo electrónico.
ACCOUNT_UPDATE Solicitar la actualización de información relacionada con la cuenta, como los datos de contacto.
TRIGGER_MFA Una acción que activa un desafío de MFA.
REDEEM_CODE Solicitud para canjear un código.
LIST_PAYMENT_METHODS Obtener la lista de métodos de pago.

En el siguiente ejemplo se muestra cómo llamar a grecaptcha.enterprise.execute() cuando se actualiza un número de teléfono:

    <script>
    function onClick(e) {
      e.preventDefault();
      grecaptcha.enterprise.ready(async () => {
        const token = await grecaptcha.enterprise.execute('KEY_ID', {action: 'PHONE_NUMBER_UPDATE'});
      });
    }
    </script>
    

Evaluar eventos de usuario críticos

Cuando llamas a grecaptcha.enterprise.execute() en una acción de usuario, se genera un token. En el caso de los eventos de usuario críticos, como los inicios de sesión, los registros y las acciones de los usuarios que han iniciado sesión (tanto si se han realizado correctamente como si no), crea una evaluación para analizar los resultados de la llamada grecaptcha.enterprise.execute(). La evaluación te proporciona un veredicto de riesgo que puedes usar para tomar una decisión sobre cómo gestionar las actividades potencialmente fraudulentas. Entre las acciones que puedes llevar a cabo se incluyen bloquear solicitudes sospechosas, verificar inicios de sesión arriesgados e investigar cuentas de interés.

reCAPTCHA Account Defender requiere que proporciones un identificador de cuenta estable para atribuir la actividad de los usuarios (como solicitudes de inicio de sesión, solicitudes de usuarios que han iniciado sesión y solicitudes de registro) a una cuenta específica. Esto ayuda a Account Defender de reCAPTCHA a comprender los patrones de actividad de los usuarios y a crear un modelo de actividad para cada cuenta con el fin de detectar mejor el tráfico anómalo y abusivo.

Elige un identificador de cuenta estable accountId que el usuario no cambie con frecuencia y proporciónalo a la evaluación en el método projects.assessments.create. Este identificador de cuenta estable debe tener el mismo valor para todos los eventos relacionados con el mismo usuario. Puedes proporcionar lo siguiente como identificador de cuenta:

Identificadores de usuario

Si cada cuenta se puede asociar de forma única a un nombre de usuario, una dirección de correo o un número de teléfono estables, puedes usarlo como accountId. Cuando proporciones identificadores entre sitios (identificadores que se pueden reutilizar en varios sitios), reCAPTCHA usará esta información para mejorar la protección de tus cuentas de usuario en función de modelos entre sitios. Para ello, marcará los identificadores de cuentas abusivas y usará el conocimiento de los patrones de abuso entre sitios relacionados con estos identificadores.

Si tiene un ID de usuario interno asociado de forma exclusiva a cada cuenta, puede proporcionarlo como accountId.

Cifrado con hash o encriptado

Si no tiene un ID de usuario interno asociado de forma exclusiva a cada cuenta, puede convertir cualquier identificador estable en un identificador de cuenta opaco y específico del sitio. Este identificador sigue siendo necesario para que reCAPTCHA Account Defender comprenda los patrones de actividad de los usuarios y detecte comportamientos anómalos, pero no se comparte con otros sitios.

Elige cualquier identificador de cuenta estable y hazlo opaco antes de enviarlo a reCAPTCHA mediante cifrado o cifrado con hash:

  • Cifrado (opción recomendada): cifra el identificador de la cuenta mediante un método de cifrado determinista que genere un texto cifrado estable. Para obtener instrucciones detalladas, consulta el artículo sobre cifrar datos de forma determinista. Si eliges el cifrado simétrico en lugar del cifrado con hash, no tienes que mantener una asignación entre tus identificadores de usuario y los identificadores de usuario opacos correspondientes. Descifra los identificadores opacos que devuelve reCAPTCHA para convertirlos en el identificador de usuario.

  • Cifrado con hash: recomendamos cifrar con hash el identificador de cuenta mediante el método SHA256-HMAC con una sal personalizada de tu elección. Como los hashes son unidireccionales, debes mantener una asignación entre los hashes generados y tus identificadores de usuario para poder asignar el identificador de cuenta cifrado que se devuelve a las cuentas originales.

Además de proporcionar un identificador de cuenta estable para todas las solicitudes relacionadas con la cuenta, puede proporcionar identificadores de cuenta adicionales, posiblemente no estables, para algunas solicitudes específicas. Los identificadores de cuenta específicos del contexto que se proporcionan además del accountId ayudan a reCAPTCHA Account Defender a comprender mejor la actividad de los usuarios y a detectar intentos de apropiación de cuentas para proteger las cuentas de usuario. Cuando proporcionas identificadores adicionales, reCAPTCHA usa esta información para mejorar la protección de tus cuentas de usuario basándose en modelos entre sitios. Para ello, marca los identificadores de cuentas abusivas y usa el conocimiento de los patrones de abuso entre sitios relacionados con estos identificadores. Por ejemplo, puedes proporcionar lo siguiente:

  • El nombre de usuario, la dirección de correo o el número de teléfono que se usó como identificador de inicio de sesión para las solicitudes de inicio de sesión

  • La dirección de correo o el número de teléfono que se verificó para una solicitud de autenticación multifactor

  • Una dirección de correo o un número de teléfono (principal o secundario) que haya proporcionado el usuario durante una solicitud de actualización de la cuenta

  • Las direcciones de correo electrónico y los números de teléfono que proporciona el usuario durante una solicitud de registro

Añade el identificador de cuenta estable elegido al parámetro accountId del método projects.assessments.create en todas las solicitudes relacionadas con la cuenta. De forma opcional, puede proporcionar identificadores de cuenta adicionales para las solicitudes pertinentes mediante el campo userIds en la evaluación.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: tu ID de proyecto Google Cloud
  • TOKEN: token devuelto de la llamada grecaptcha.enterprise.execute()
  • KEY_ID: clave de reCAPTCHA asociada al sitio
  • ACCOUNT_ID: identificador asociado de forma única a la cuenta de usuario de su sitio web.
  • EMAIL_ADDRESS: opcional. Una dirección de correo asociada a esta solicitud, si procede
  • PHONE_NUMBER: opcional. Un número de teléfono asociado a esta solicitud, si hay alguno
  • USERNAME: opcional. Nombre de usuario asociado a esta solicitud, si lo hay.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "event": {
    "token": "TOKEN",
    "siteKey": "KEY_ID",
    "userInfo": {
      "accountId": "ACCOUNT_ID",
      "userIds": [
        {
          "email": "EMAIL_ADDRESS"
        },
        {
          "phoneNumber": "PHONE_NUMBER"
        },
        {
          "username": "USERNAME"
        }
      ]
    }
  }
}

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/assessments"

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/assessments" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la siguiente:

{
  "tokenProperties": {
    "valid": true,
    "hostname": "www.google.com",
    "action": "login",
    "createTime": "2019-03-28T12:24:17.894Z"
   },
  "riskAnalysis": {
    "score": 0.6,
  },
 "event": {
    "token": "TOKEN",
    "siteKey": "KEY",
    "userInfo": {
      "accountId": "ACCOUNT_ID"
    }
  },
  "name": "projects/PROJECT_NUMBER/assessments/b6ac310000000000",
  "accountDefenderAssessment": {
    "labels": ["SUSPICIOUS_LOGIN_ACTIVITY"]
  }
}

Código de ejemplo

Java

Para autenticarte en reCAPTCHA, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.


import com.google.cloud.recaptchaenterprise.v1.RecaptchaEnterpriseServiceClient;
import com.google.protobuf.ByteString;
import com.google.recaptchaenterprise.v1.AccountDefenderAssessment.AccountDefenderLabel;
import com.google.recaptchaenterprise.v1.Assessment;
import com.google.recaptchaenterprise.v1.CreateAssessmentRequest;
import com.google.recaptchaenterprise.v1.Event;
import com.google.recaptchaenterprise.v1.ProjectName;
import com.google.recaptchaenterprise.v1.RiskAnalysis.ClassificationReason;
import com.google.recaptchaenterprise.v1.TokenProperties;
import com.google.recaptchaenterprise.v1.UserId;
import com.google.recaptchaenterprise.v1.UserInfo;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.UUID;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

public class AccountDefenderAssessment {

  public static void main(String[] args)
      throws IOException, NoSuchAlgorithmException, InvalidKeyException {
    // TODO(developer): Replace these variables before running the sample.
    // projectId: Google Cloud Project ID
    String projectId = "project-id";

    // recaptchaSiteKey: Site key obtained by registering a domain/app to use recaptcha
    // services.
    String recaptchaSiteKey = "recaptcha-site-key";

    // token: The token obtained from the client on passing the recaptchaSiteKey.
    // To get the token, integrate the recaptchaSiteKey with frontend. See,
    // https://cloud.google.com/recaptcha-enterprise/docs/instrument-web-pages#frontend_integration_score
    String token = "recaptcha-token";

    // recaptchaAction: The action name corresponding to the token.
    String recaptchaAction = "recaptcha-action";

    // Unique ID of the user, such as email, customer ID, etc.
    String accountId = "default" + UUID.randomUUID().toString().split("-")[0];

    // User phone number
    String phoneNumber = "555-987-XXXX";

    // User email address
    String emailAddress = "john.doe@example.com";

    accountDefenderAssessment(projectId, recaptchaSiteKey, token, recaptchaAction, accountId, phoneNumber, emailAddress);
  }

  /**
   * This assessment detects account takeovers. See,
   * https://cloud.google.com/recaptcha-enterprise/docs/account-takeovers The input is the hashed
   * account id. Result tells if the action represents an account takeover. You can optionally
   * trigger a Multi-Factor Authentication based on the result.
   */
  public static void accountDefenderAssessment(
      String projectId,
      String recaptchaSiteKey,
      String token,
      String recaptchaAction,
      String accountId,
      String phoneNumber,
      String emailAddress)
      throws IOException {
    try (RecaptchaEnterpriseServiceClient client = RecaptchaEnterpriseServiceClient.create()) {

      // Set the properties of the event to be tracked.
      Event.Builder eventBuilder =
          Event.newBuilder()
              .setSiteKey(recaptchaSiteKey)
              .setToken(token);

      // Set the account id, email address and phone number (of the user).
      eventBuilder.setUserInfo(
        UserInfo.newBuilder()
          .setAccountId(accountId)
          .addUserIds(UserId.newBuilder().setEmail(emailAddress))
          .addUserIds(UserId.newBuilder().setPhoneNumber(phoneNumber)));

      Event event = eventBuilder.build();

      // Build the assessment request.
      CreateAssessmentRequest createAssessmentRequest =
          CreateAssessmentRequest.newBuilder()
              .setParent(ProjectName.of(projectId).toString())
              .setAssessment(Assessment.newBuilder().setEvent(event).build())
              .build();

      Assessment response = client.createAssessment(createAssessmentRequest);

      // Check integrity of the response token.
      if (!checkTokenIntegrity(response.getTokenProperties(), recaptchaAction)) {
        return;
      }

      // Get the reason(s) and the reCAPTCHA risk score.
      // For more information on interpreting the assessment,
      // see: https://cloud.google.com/recaptcha-enterprise/docs/interpret-assessment
      for (ClassificationReason reason : response.getRiskAnalysis().getReasonsList()) {
        System.out.println(reason);
      }
      float recaptchaScore = response.getRiskAnalysis().getScore();
      System.out.println("The reCAPTCHA score is: " + recaptchaScore);
      String assessmentName = response.getName();
      System.out.println(
          "Assessment name: " + assessmentName.substring(assessmentName.lastIndexOf("/") + 1));

      // Get the Account Defender result.
      com.google.recaptchaenterprise.v1.AccountDefenderAssessment accountDefenderAssessment =
          response.getAccountDefenderAssessment();
      System.out.println(accountDefenderAssessment);

      // Get Account Defender label.
      List<AccountDefenderLabel> defenderResult =
          response.getAccountDefenderAssessment().getLabelsList();
      // Based on the result, can you choose next steps.
      // If the 'defenderResult' field is empty, it indicates that Account Defender did not have
      // anything to add to the score.
      // Few result labels: ACCOUNT_DEFENDER_LABEL_UNSPECIFIED, PROFILE_MATCH,
      // SUSPICIOUS_LOGIN_ACTIVITY, SUSPICIOUS_ACCOUNT_CREATION, RELATED_ACCOUNTS_NUMBER_HIGH.
      // For more information on interpreting the assessment, see:
      // https://cloud.google.com/recaptcha-enterprise/docs/account-defender#interpret-assessment-details
      System.out.println("Account Defender Assessment Result: " + defenderResult);
    }
  }

  private static boolean checkTokenIntegrity(
      TokenProperties tokenProperties, String recaptchaAction) {
    // Check if the token is valid.
    if (!tokenProperties.getValid()) {
      System.out.println(
          "The Account Defender Assessment call failed because the token was: "
              + tokenProperties.getInvalidReason().name());
      return false;
    }

    // Check if the expected action was executed.
    if (!tokenProperties.getAction().equals(recaptchaAction)) {
      System.out.printf(
          "The action attribute in the reCAPTCHA tag '%s' does not match "
              + "the action '%s' you are expecting to score",
          tokenProperties.getAction(), recaptchaAction);
      return false;
    }
    return true;
  }
}

Interpretar el veredicto de riesgo de los eventos de usuario críticos

Cuando creas una evaluación con Account Defender habilitado, Account Defender devuelve accountDefenderAssessment como parte de la respuesta de la evaluación. El valor de accountDefenderAssessment te ayuda a evaluar si la actividad del usuario es legítima o fraudulenta. También devuelve un ID de evaluación que debes usar al anotar eventos de usuario.

A continuación se muestra un ejemplo de respuesta JSON:

{
  "tokenProperties": {
    "valid": true,
    "hostname": "www.google.com",
    "action": "login",
    "createTime": "2019-03-28T12:24:17.894Z"
   },
  "riskAnalysis": {
    "score": 0.6,
  },
 "event": {
    "token": "TOKEN",
    "siteKey": "KEY_ID",
    "expectedAction": "USER_ACTION"
  },
  "name": "projects/PROJECT_ID/assessments/b6ac310000000000X",
  "accountDefenderAssessment": {
    labels: ["SUSPICIOUS_LOGIN_ACTIVITY"]
  }
}

El campo accountDefenderAssessment puede tener cualquiera de los siguientes valores:

Valor Descripción
SUSPICIOUS_LOGIN_ACTIVITY Indica que la solicitud representa un riesgo alto de relleno de credenciales o de robo de cuentas.
SUSPICIOUS_ACCOUNT_CREATION Indica que la solicitud representa un riesgo alto de creación de cuentas abusivas.
PROFILE_MATCH

Indica que los atributos del usuario coinciden con los atributos que se han visto anteriormente para este usuario concreto. Este valor es un indicador de que el usuario está en un dispositivo de confianza que se ha usado antes para acceder a su sitio web.

PROFILE_MATCH solo se devuelve en los siguientes casos:

  • Utilizas la autenticación multifactor(MFA) o la autenticación de dos factores(2FA) y reCAPTCHA Account Defender marca los perfiles de usuario como fiables después de que los usuarios superen el reto de MFA o 2FA.
  • Anota las evaluaciones como LEGITIMATE o PASSED_TWO_FACTOR y reCAPTCHA Account Defender marca el perfil de usuario correspondiente como de confianza.
RELATED_ACCOUNTS_NUMBER_HIGH Indica que la solicitud tiene un número elevado de cuentas relacionadas. Esto no implica necesariamente que la cuenta sea incorrecta, pero puede requerir una investigación más exhaustiva.

Anotar eventos para optimizar el modelo específico de tu sitio

Para proporcionar más información a Account Defender de reCAPTCHA y mejorar el modelo de detección específico de tu sitio, debes anotar los eventos que hayas evaluado creando evaluaciones.

Para anotar una evaluación, envía una solicitud al método projects.assessments.annotate con el ID de la evaluación. En el cuerpo de esa solicitud, se incluyen etiquetas que proporcionan información adicional sobre un evento descrito en la evaluación.

Para anotar una evaluación, haz lo siguiente:

  1. Determina la información y las etiquetas que se deben añadir al cuerpo JSON de la solicitud en función de tu caso práctico.

    En la siguiente tabla se enumeran las etiquetas y los valores que puede usar para anotar eventos:

    Etiqueta Descripción Ejemplo de solicitud
    reasons Obligatorio. Una etiqueta para respaldar tus evaluaciones.

    Proporcione los detalles de los eventos en tiempo real en la etiqueta reasons unos segundos o minutos después de que se produzcan, ya que influyen en la detección en tiempo real.

    Para ver la lista de posibles valores, consulta los valores de los motivos.

    Ejemplo: Para detectar la apropiación de cuentas, anota si la contraseña introducida era correcta con los valores CORRECT_PASSWORD o INCORRECT_PASSWORD. Si has implementado tu propia MFA, puedes añadir los siguientes valores: INITIATED_TWO_FACTOR, PASSED_TWO_FACTOR o FAILED_TWO_FACTOR.

          {
          "reasons": ["INCORRECT_PASSWORD"]
          }
        
    annotation Opcional. Una etiqueta que indica la legitimidad de las evaluaciones.

    Proporciona datos sobre los eventos de inicio de sesión y registro para validar o corregir tus evaluaciones de riesgos en la etiqueta annotation.

    Valores posibles: LEGITIMATE o FRAUDULENT.

    Puede enviar esta información en cualquier momento o como parte de un trabajo por lotes. Sin embargo, le recomendamos que envíe esta información unos segundos o minutos después del evento, ya que influye en la detección en tiempo real.

          {
           "annotation": "LEGITIMATE"
          }
    
      
    accountId

    Opcional. Etiqueta para asociar un ID de cuenta a un evento.

    Si ha creado una evaluación sin un ID de cuenta, use esta etiqueta para proporcionar el ID de cuenta de un evento siempre que esté disponible.

      {
       "accountId": "ACCOUNT_ID"
      }
  2. Crea una solicitud de anotación con las etiquetas adecuadas.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • ASSESSMENT_ID: valor del campo name devuelto por la llamada projects.assessments.create.
    • ANNOTATION: opcional. Etiqueta que indica si la evaluación es legítima o fraudulenta.
    • REASONS: opcional. Motivos que respaldan tu anotación. Para ver la lista de valores posibles, consulta los valores de motivos.
    • ACCOUNT_ID: opcional. Identificador asociado de forma única a la cuenta de usuario de su sitio web.

    Para obtener más información, consulta las etiquetas de las anotaciones.

    Método HTTP y URL:

    POST https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate

    Cuerpo JSON de la solicitud:

    {
      "annotation": ANNOTATION,
      "reasons": REASONS,
      "accountId": ACCOUNT_ID
    }
    

    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/ASSESSMENT_ID:annotate"

    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/ASSESSMENT_ID:annotate" | Select-Object -Expand Content

    Deberías recibir un código de estado que indique que la operación se ha realizado correctamente (2xx) y una respuesta vacía.

Código de ejemplo

Java

Para autenticarte en reCAPTCHA, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.


import com.google.cloud.recaptchaenterprise.v1.RecaptchaEnterpriseServiceClient;
import com.google.protobuf.ByteString;
import com.google.recaptchaenterprise.v1.AnnotateAssessmentRequest;
import com.google.recaptchaenterprise.v1.AnnotateAssessmentRequest.Annotation;
import com.google.recaptchaenterprise.v1.AnnotateAssessmentRequest.Reason;
import com.google.recaptchaenterprise.v1.AnnotateAssessmentResponse;
import com.google.recaptchaenterprise.v1.AssessmentName;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;

public class AnnotateAccountDefenderAssessment {

  public static void main(String[] args) throws IOException, NoSuchAlgorithmException {
    // TODO(developer): Replace these variables before running the sample.
    // projectID: GCloud Project id.
    String projectID = "project-id";

    // assessmentId: Value of the 'name' field returned from the CreateAssessment call.
    String assessmentId = "account-defender-assessment-id";

    // accountId: Set the accountId corresponding to the assessment id.
    String accountId = "default" + UUID.randomUUID().toString().split("-")[0];

    annotateAssessment(projectID, assessmentId, accountId);
  }

  /**
   * Pre-requisite: Create an assessment before annotating. Annotate an assessment to provide
   * feedback on the correctness of recaptcha prediction.
   */
  public static void annotateAssessment(
      String projectID, String assessmentId, String accountId) throws IOException {

    try (RecaptchaEnterpriseServiceClient client = RecaptchaEnterpriseServiceClient.create()) {
      // Build the annotation request.
      // For more info on when/how to annotate, see:
      // https://cloud.google.com/recaptcha-enterprise/docs/annotate-assessment#when_to_annotate
      AnnotateAssessmentRequest annotateAssessmentRequest =
          AnnotateAssessmentRequest.newBuilder()
              .setName(AssessmentName.of(projectID, assessmentId).toString())
              .setAnnotation(Annotation.LEGITIMATE)
              .addReasons(Reason.PASSED_TWO_FACTOR)
              .setAccountId(accountId)
              .build();

      // Empty response is sent back.
      AnnotateAssessmentResponse response = client.annotateAssessment(annotateAssessmentRequest);
      System.out.println("Annotated response sent successfully ! " + response);
    }
  }
}

Habilitar Account Defender de reCAPTCHA

Una vez que hayas configurado tus páginas web para usar reCAPTCHA Account Defender, podrás habilitarlo.

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

    Ir a reCAPTCHA

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

    Si no ves el nombre de tu proyecto, haz clic en el selector de recursos y, a continuación, selecciona tu proyecto.

  3. Haz clic en Configuración.
  4. En el panel Protección de la cuenta, haga clic en Configurar.

  5. En el cuadro de diálogo Configurar Account Defender, haga clic en Habilitar y, a continuación, en Guardar.

La habilitación de Account Defender de reCAPTCHA puede tardar unas horas en propagarse a nuestros sistemas. Una vez que la habilitación de la función se haya propagado a nuestros sistemas, deberías empezar a recibir respuestas relacionadas con Account Defender como parte de las evaluaciones.

Siguientes pasos