Configurar la autenticación de varios factores

En esta página, se describe cómo configurar la autenticación de varios factores (MFA) que te permite verificar la identidad de tus usuarios mediante el envío de un código de verificación por correo electrónico o SMS. Con esta función, puedes verificar que tus usuarios sean propietarios de la dirección de correo electrónico o el número de teléfono asociado a sus cuentas. La MFA puede ayudar a proteger a los usuarios contra ataques de relleno de credenciales y de apropiación de cuentas (ATO).

La MFA está disponible para las claves de sitio basadas en la puntuación y no para las claves del sitio de la casilla de verificación.

Comprende el proceso de configuración de la MFA

Para configurar la MFA, sigue estos pasos:

  1. Instrumenta el flujo de trabajo crítico (acceso, registro, etc.) en el cliente.
  2. Solicita y, luego, interpreta la información de MFA en la evaluación.
  3. Activa un desafío de MFA en el cliente.
  4. Solicita una evaluación nueva para asegurarte de que la dirección de correo electrónico o el número de teléfono del usuario se verificaron de forma correcta.

Antes de comenzar

  1. Elige el mejor método para configurar reCAPTCHA Enterprise en tu entorno y completa la configuración.

  2. Se puede acceder a la MFA después de una revisión de seguridad. Comunícate con nuestro equipo de ventas para incorporar tu sitio a esta función. Proporcione la siguiente información de integración al equipo de ventas:

    • Número del proyecto de Google Cloud
    • Claves del sitio para incorporar
    • Promedio de QPS (correos electrónicos/SMS) por segundo
    • Cantidad máxima de QPS (correos electrónicos/SMS por segundo)
    • Para la MFA de correo electrónico, la dirección de remitente y las direcciones de correo electrónico o dominios que necesitas durante la prueba
    • Para la MFA de SMS, el máximo y el promedio de QPS por país de destino (el país de tu usuario)
  3. Integra reCAPTCHA Enterprise a las plataformas para las que deseas habilitar la MFA mediante las instrucciones específicas de la plataforma:

Instrumenta el flujo de trabajo crítico en el cliente

Pasa la información necesaria a reCAPTCHA Enterprise a través de la función execute() para la evaluación de riesgos. La función execute() muestra una promesa que se resuelve durante la generación del token.

En sitios web

Agrega un parámetro twofactor adicional a tu función execute(), como se indica en el siguiente código de muestra:

grecaptcha.enterprise.execute(SITE_KEY, {
  action: 'login',
  twofactor: true
}).then(token => {
  /// Handle the generated token.
});

En Android

Sigue las instrucciones a fin de generar un token para tu aplicación para Android. No se requiere ningún parámetro adicional.

En iOS

Sigue las instrucciones a fin de generar un token para tu aplicación para iOS. No se requiere ningún parámetro adicional.

Solicita una evaluación

Con el token que genera elexecute() hacer una solicitud de evaluación utilizando la funciónBibliotecas cliente de reCAPTCHA Enterprise oherramienta de línea de comandos de gcloud para la autenticación.

Proporciona un identificador de cuenta con hash y uno o más extremos, como una dirección de correo electrónico y un número de teléfono para verificar en la evaluación. El identificador de cuenta con hash es un identificador anónimo y persistente para una cuenta de usuario que es exclusiva de tu sitio web. Utilice un hash unidireccional de un identificador de cuenta estable. Te recomendamos usar sha256-hmac con un secreto estable que no compartas con nosotros.

{
  "event": {
    "token": "token",
    "siteKey": "key",
    "hashedAccountId": "BP3ptt00D9W7UMzFmsPdEjNH3Chpi8bo40R6YW2b"
  },
  "accountVerification": {
    "endpoints": [{
      "emailAddress": "foo@bar.com",
    },
    {
      "phoneNumber": "+11111111111",
    }]
  }
}

Si la integración con la función es exitosa, la evaluación debe contener más información relacionada con la MFA, como se muestra en el siguiente ejemplo:

{
  [...],
  "accountVerification": {
    "endpoints": [{
      "emailAddress": "foo@bar.com",
      "requestToken": "tplIUFvvJUIpLaOH0hIVj2H71t5Z9mDK2RhB1SAGSIUOgOIsBv",
      "lastVerificationTime": "",
    },
    {
      "phoneNumber": "+11111111111",
      "requestToken": "fwdgk0kcg1W0mbpetYlgTZKyrp4IHKzjgRkb6vLNZeBQhWdR3a",
      "lastVerificationTime": "",
    }],
    "latestVerificationResult": "RESULT_UNSPECIFIED"
  }
}

La evaluación contiene la fecha y la hora de la última verificación exitosa para los extremos determinados en el dispositivo que emitió el token, si corresponde. También incluye un campo requestToken por extremo, que contiene una string encriptada. Si decides activar un desafío de MFA para ese extremo, debes volver a enviar esta string encriptada al cliente. Los tokens de solicitud son válidos durante 15 minutos.

Activa un desafío de MFA en el cliente

Si decidiste desafiar al usuario en función de la información incluida en la evaluación, envía el token de solicitud de MFA para el extremo que deseas verificar de la evaluación al cliente. Este token de solicitud es necesario para activar el desafío de MFA.

Activa el desafío de MFA con una llamada a challengeAccount(). La función challengeAccount() muestra una promesa que se resuelve después de que se completa el desafío o se rechaza si hubo un error o se agotó el tiempo de espera. Cuando se completa, se genera un token nuevo que contiene información actualizada, que luego se envía para su evaluación.

En sitios web

Activa el desafío de MFA con una llamada a la función challengeAccount() como se muestra en el siguiente ejemplo.

Ingresa los siguientes valores:

  • REQUEST_TOKEN_FROM_ASSESSMENT: El valor del campo requestToken de la respuesta de la evaluación.
  • CONTAINER_HTML_COMPONENT_ID: ID de un componente HTML en el que se debe procesar el desafío de verificación Si no especificas este parámetro, la verificación se renderizará en una superposición sobre la página.
grecaptcha.enterprise.challengeAccount(SITE_KEY, {
  'account-token': REQUEST_TOKEN_FROM_ASSESSMENT,
  'container': CONTAINER_HTML_COMPONENT_ID
}).then(newToken => {
  // Handle the new token.
});

En Android

Activa el desafío MFA con una llamada a challengeAccount() desde un Context en tu aplicación.

Recaptcha.getClient(this)
   .challengeAccount(recaptchaHandle, requestToken)
   .addOnSuccessListener(
       this,
       new OnSuccessListener<VerificationHandle>() {
         @Override
         public void onSuccess(VerificationHandle handle) {
           VerificationHandle verificationHandle = handle;
           // Handle success ...
         }
       })
   .addOnFailureListener(
       this,
       new OnFailureListener() {
         @Override
         public void onFailure(@NonNull Exception e) {
           if (e instanceof ApiException) {
              ApiException apiException = (ApiException) e;
              Status apiErrorStatus = apiException.getStatusCode();
              // Handle API errors ...
           } else {
              // Handle other failures ...
           }

         }
       });

Después de obtener el PIN del usuario, llama a verifyAccount() desde una Activity en tu app para verificar que el PIN ingresado sea correcto.

Recaptcha.getClient(this)
   .verifyAccount("userProvidedPIN", recaptchaHandle)
   .addOnSuccessListener(
       this,
       new OnSuccessListener<VerificationResult>() {
         @Override
         public void onSuccess(VerificationResult result) {
           if (result.getVerificationStatus().isSuccess()) {
             String recaptchaToken = result.recaptchaToken().orNull()
             // Handle success ...
           } else {
             VerificationHandle verificationHandle =
                              result.verificationHandle().orNull();
             Status errorStatus = result.getVerificationStatus();
             // Handle retries ...
           }
         }
       })
   .addOnFailureListener(
       this,
       new OnFailureListener() {
         @Override
         public void onFailure(@NonNull Exception e) {
           if (e instanceof ApiException) {
              ApiException apiException = (ApiException) e;
              Status apiErrorStatus = apiException.getStatusCode();
              // Handle API errors ...
           } else {
              // Handle other failures ...
           }
         }
       });

En iOS

Activa el desafío de MFA con una llamada a challengeAccount().

recaptchaClient.challengeAccount(withRequestToken: "Request Token").then { verificationHandler in
  // Show your UI and retrieve the pin from the user.
}.catch { error in
  // Handle error.
}

Después de obtener el PIN del usuario, llama al método verifyPin() del objeto verificationHandler para completar la verificación.

handler.verifyPin("PIN") { recaptchaToken, recaptchaError in
  // Handle token/error.
}

Solicita una nueva evaluación

Solicita una evaluación nueva con el identificador de cuenta con hash y el campo endpoints.

Una vez que se completa el flujo de trabajo en el cliente, recibes un token nuevo que puedes usar para obtener el veredicto de la verificación que activaste. La evaluación contiene una marca de tiempo reciente relacionada con la verificación exitosa más reciente, junto con un estado de resultado correcto.

En el siguiente ejemplo, se muestra una evaluación de muestra que recibes cuando solicitas una evaluación nueva con el token nuevo obtenido del cliente.

{
  [...],
  "accountVerification": {
    "endpoints": [{
      "emailAddress": "foo@bar.com",
      "requestToken": "tplIUFvvJUIpLaOH0hIVj2H71t5Z9mDK2RhB1SAGSIUOgOIsBv",
      "lastVerificationTime": "2020-03-23 08:27:12 PST",
    }],
    "latestVerificationResult": "SUCCESS_USER_VERIFIED"
  }
}

El campo latestVerificationResult puede mostrar un estado diferente como se indica en la siguiente tabla:

Estado de los resultados de la verificación Descripción
SUCCESS_USER_VERIFIED Se verificó correctamente al usuario.
ERROR_USER_NOT_VERIFIED El usuario no superó el desafío de verificación.
ERROR_SITE_ONBOARDING_INCOMPLETE Tu sitio no está integrado correctamente para usar la función.
ERROR_RECIPIENT_NOT_ALLOWED Este destinatario no está aprobado para enviarle SMS o correos electrónicos (solo durante las pruebas).
ERROR_RECIPIENT_ABUSE_LIMIT_EXHAUSTED Este destinatario ya recibió demasiados códigos de verificación en un período corto.
ERROR_CUSTOMER_QUOTA_EXHAUSTED Superaste la cuota de MFA disponible.
ERROR_CRITICAL_INTERNAL No se completó la verificación debido a un error interno en nuestros sistemas.
RESULT_UNSPECIFIED No hay información sobre la verificación más reciente (nunca verificada).