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 enviando un código de verificación por correo electrónico. Con esta función, puedes verificar que tus usuarios sean los propietarios de la dirección de correo electrónico asociada a su cuenta. La MFA puede ayudar a proteger a tus usuarios contra ataques de relleno de credenciales y apropiaciones de cuentas (ATO).
La MFA está disponible para las claves basadas en la puntuación y no para las claves de casillas de verificación.
Comprende el proceso de configuración de la MFA
La función de MFA de reCAPTCHA se implementa sobre el flujo de trabajo normal reCAPTCHA.
En un nivel general, el flujo de trabajo de la MFA es el siguiente:
- Instrumenta el flujo de trabajo crítico en tu sitio web.
- Crea una evaluación con
el token que muestra la llamada
execute()y los parámetros de la MFA para obtener unrequestTokende la MFA. - Activa un desafío de MFA con el
requestTokensegún el canal que quieras usar (solo se admite el correo electrónico). - Verifica el PIN que ingresó el usuario final en tu sitio web.
- Crea una nueva evaluación con el token que se muestra en la solicitud de verificación.
Antes de comenzar
Si necesitas aumentar los límites de cuota durante o después de la implementación, comunícate con el equipo de Asistencia para empresas de reCAPTCHA Enterprise con un período de aviso suficiente. Por lo general, los cambios en la cuota de correo electrónico se pueden realizar con al menos una semana de anticipación.Se puede acceder a la MFA después de una revisión de seguridad, que se inicia cuando agregas una cuenta de facturación a tu proyecto. Agrega una cuenta de facturación para incorporar tu sitio a esta función.
Si quieres habilitar la función de verificación por correo electrónico de la MFA, haz lo siguiente:
En la Google Cloud consola, ve a la reCAPTCHAreCAPTCHA.
Verifica que el nombre de tu proyecto aparezca en el selector de recursos.
Si no ves el nombre de tu proyecto, haz clic en el selector de recursos y, luego, selecciona tu proyecto.
Haz clic en Configuración.
En el panel Multi Factor Authentication, haz clic en Configure.
En el diálogo Configure MFA, haz lo siguiente:
- Para habilitar la verificación por correo electrónico, haz clic en el botón de activación Enable email.
- En el cuadro Sender name, ingresa tu nombre.
En el cuadro Sender email, ingresa tu dirección de correo electrónico.
Haz clic en Guardar.
Después de configurar tu dirección de correo electrónico del remitente, configura tus registros DNS para evitar problemas de entrega. En los siguientes pasos, reemplaza
example.compor tu dominio.Agrega un registro SPF para permitir que reCAPTCHA envíe correos electrónicos en tu nombre:
Host: example.com Value: v=spf1 include:_spf.recaptchamail.goog ~allIncluye las siguientes entradas CNAME para que los servidores encuentren la DKIM:
Host: recaptcha1._domainkey.example.com Value: recaptcha1._domainkey.recaptchamail.goog.Host: recaptcha2._domainkey.example.com Value: recaptcha2._domainkey.recaptchamail.goog.
Configura reCAPTCHA en tu sitio web con claves basadas en la puntuación.
Instrumenta el flujo de trabajo crítico en tu sitio web
Pasa la información necesaria a reCAPTCHA a través de la función execute() para la evaluación de riesgo. La función execute() muestra una promesa que se resuelve tras la generación de tokens.
Agrega un parámetro twofactor adicional a tu función execute(), como se indica en el siguiente código de muestra:
grecaptcha.enterprise.execute(KEY_ID, {
action: 'login',
twofactor: true
}).then(token => {
// Handle the generated token.
});
Reemplaza KEY_ID por la clave basada en la puntuación que creaste para tu sitio web.
Crea una evaluación
Con el token que genera la función execute(), crea una evaluación con las bibliotecas cliente de reCAPTCHA o la API de REST desde tu backend.
En este documento, se muestra cómo crear una evaluación para la MFA con la API de REST. Para obtener información sobre cómo crear una evaluación con las bibliotecas cliente, consulta Crea evaluaciones para sitios web.
Antes de crear una evaluación, haz lo siguiente:
Configura la autenticación en Fraud Defense.
El método de autenticación que elijas dependerá del entorno en el que se configure Fraud Defense. En la siguiente tabla, se te ayudará a elegir el método de autenticación adecuado y la interfaz compatible para configurar la autenticación:
Entorno Interfaz Método de autenticación Google Cloud - REST
- Bibliotecas cliente
Usa cuentas de servicio conectadas. Local o en un proveedor de servicios en la nube diferente REST Usa claves de API o la federación de identidades para cargas de trabajo. Si quieres usar claves de API, te recomendamos que las protejas aplicando restricciones de claves de API.
Bibliotecas cliente Para ello, usa los siguientes recursos:
- Para Python o Java, usa claves de API o la federación de identidades para cargas de trabajo.
Si quieres usar claves de API, te recomendamos que las protejas aplicando restricciones de claves de API.
- Para otros lenguajes, usa la federación de identidades para cargas de trabajo.
Elige un identificador de cuenta estable
accountIdque el usuario no cambie con frecuencia y proporciónalo a la evaluación en elprojects.assessments.createmétodo. 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 con un nombre de usuario, una dirección de correo electrónico o un número de teléfono estables, puedes usarlo como el
accountId. Cuando proporcionas esos identificadores entre sitios (identificadores que se pueden reutilizar en varios sitios), Fraud Defense usa esta información para mejorar la protección de tus cuentas de usuario en función de los modelos entre sitios marcando los identificadores de cuentas abusivas y usando el conocimiento de los patrones de abuso entre sitios relacionados con estos identificadores.Como alternativa, si tienes un ID de usuario interno asociado de forma única con cada cuenta, puedes proporcionarlo como el
accountId.Con hash o encriptado
Si no tienes un ID de usuario interno asociado de forma única con cada cuenta, puedes convertir cualquier identificador estable en un identificador de cuenta opaco y específico del sitio. Este identificador sigue siendo necesario para que la protección de cuentas de Fraud Defense comprenda los patrones de actividad del usuario y detecte comportamientos anómalos, pero no se comparte en otros sitios.
Elige cualquier identificador de cuenta estable y hazlo opaco antes de enviarlo a Fraud Defense con encriptación o codificación hash:
Encriptación (recomendada): Encripta el identificador de cuenta con un método de encriptación determinista encriptación que produzca un texto cifrado estable. Para obtener instrucciones detalladas, consulta encripta datos de forma determinista. Cuando eliges la encriptación simétrica en lugar de la codificación hash, no necesitas mantener una asignación entre tus identificadores de usuario y los identificadores de usuario opacos correspondientes. Descifra los identificadores opacos que muestra Fraud Defense para convertirlos en el identificador de usuario.
Codificación hash: Te recomendamos que apliques la codificación hash al identificador de cuenta con el método SHA256-HMAC con una sal personalizada de tu elección. Debido a que los hashes son solo unidireccionales, debes mantener una asignación entre los hashes generados y tus identificadores de usuario para poder asignar el identificador de cuenta con hash que se muestra a las cuentas originales.
Agrega el parámetro accountId y un extremo, como una dirección de correo electrónico, para
verificar en la evaluación en el projects.assessments.create método.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: Es el ID del Google Cloud proyecto de.
- TOKEN: token que se muestra desde la llamada a
grecaptcha.enterprise.execute(). - KEY_ID: Es la clave basada en la puntuación que instalaste en tu sitio web.
- ACCOUNT_ID: Es un identificador de una cuenta de usuario que es único para tu sitio web.
- EMAIL_ID: Es la dirección de correo electrónico para la que se debe activar la solicitud de verificación.
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"
}
}
"accountVerification": {
"endpoints": [{
"emailAddress": "EMAIL_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/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 que se muestra a continuación:
{
[...],
"accountVerification": {
"endpoints": [{
"emailAddress": "foo@bar.com",
"requestToken": "tplIUFvvJUIpLaOH0hIVj2H71t5Z9mDK2RhB1SAGSIUOgOIsBv",
"lastVerificationTime": "",
}],
"latestVerificationResult": "RESULT_UNSPECIFIED"
}
}
La evaluación contiene la fecha y hora de la última verificación correcta de los extremos determinados en el dispositivo que emitió el token, si corresponde. También contiene un campo requestToken por extremo, que contiene una cadena encriptada. Si decides activar un desafío de MFA para ese extremo, debes enviar esta cadena encriptada de vuelta a la página web. Los tokens de solicitud son válidos durante 15 minutos.
Acciones recomendadas
Si tienes habilitado el protector de cuentas de reCAPTCHA
para tu proyecto, la respuesta de la evaluación contiene información relacionada
con el protector de cuentas, además de la información relacionada con la MFA. El campo recommended_action muestra la posible acción que puedes realizar antes de activar el desafío de MFA.
En el siguiente ejemplo, se muestra una evaluación de muestra que muestra omitir la MFA como la acción recomendada:
{ [...], "accountDefenderAssessment": { labels: ["PROFILE_MATCH"], "recommended_action": "SKIP_2FA" } }
El campo recommended_action puede tener cualquiera de los siguientes valores:
| Valor | Descripción |
|---|---|
RECOMMENDED_ACTION_UNSPECIFIED |
Indica que el protector de cuentas no pudo emitir un juicio para esta solicitud. |
SKIP_2FA |
Indica que el protector de cuentas considera que es seguro omitir la MFA para esta evaluación. Por lo general, esto significa que el usuario se verificó recientemente en tu sitio en este dispositivo. |
REQUEST_2FA |
Indica que activas un desafío de MFA para el usuario. Para obtener más información, consulta Respuesta de la evaluación del protector de cuentas. |
Activa un desafío de MFA en tu sitio web
Para desafiar al usuario en función de la información que contiene la evaluación, envía el requestToken de la MFA para el extremo que deseas verificar desde la evaluación a la página web.
Activa el desafío 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 tiempo de espera.
Una vez finalizado, se genera un token nuevo que contiene información actualizada, que luego se envía para su evaluación.
Para activar un desafío de MFA, haz lo siguiente:
Prueba la integración de la MFA.
Activa un desafío de MFA con una llamada a
challengeAccount()proporcionando los siguientes valores:- KEY_ID: Es la clave basada en la puntuación que instalaste en tu sitio web.
- REQUEST_TOKEN_FROM_ASSESSMENT: Es el valor del
requestTokencampo de la respuesta de la evaluación. - CONTAINER_HTML_COMPONENT_ID: Es el ID del componente HTML en el que se debe procesar el desafío de verificación. Si no especificas este parámetro, el desafío se procesará en una superposición en la parte superior de la página.
En el siguiente ejemplo, se muestra cómo activar el desafío de MFA con una llamada a
challengeAccount():grecaptcha.enterprise.challengeAccount(KEY_ID, { 'account-token': REQUEST_TOKEN_FROM_ASSESSMENT, 'container': CONTAINER_HTML_COMPONENT_ID }).then(newToken => { // Handle the new token. });Si la solicitud
challengeAccount()se realiza correctamente, se muestra el componente HTML para ingresar el PIN recibido. Después de ingresar el PIN correcto, la variablenewTokense pasa a la función encadenada que contiene el token de veredicto que se verificará a través de una evaluación que se crea en el backend.Crea un controlador de verificación e inicia un desafío con los siguientes parámetros:
// Initialize verification handle. const verificationHandle = grecaptcha.enterprise.eap.initTwoFactorVerificationHandle( KEY_ID, REQUEST_TOKEN_FROM_ASSESSMENT ); // Call the challenge API. verificationHandle.challengeAccount().then( (challengeResponse) => { if (challengeResponse.isSuccess()) { // Handle success: This means displaying an input for the end user to // enter the PIN that they received and then call the `verifyAccount(pin)` // method. } else { // Handle API failure } });
Verifica un código de MFA desde la página web
Después de obtener el PIN del usuario final, debes validar si es correcto.
Para validar el PIN, llama a verificationHandle.verifyAccount() con el PIN que ingresó el usuario final.
verificationHandle.verifyAccount(pin).then(
(verifyResponse) => {
if (verifyResponse.isSuccess()) {
// Handle success: Send the result of `verifyResponse.getVerdictToken()`
// to the backend in order to determine if the code was valid.
} else {
// Handle API failure
}
},
(error) => {
// Handle other errors
}
);
Crear una nueva evaluación
Crea una nueva evaluación con accountId y endpoints. Para obtener instrucciones, consulta
crea una evaluación para la MFA.
Una vez que se complete el flujo de trabajo en el cliente, recibirás 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 respecto de la última verificación exitosa con un estado de resultado correcto.
En el siguiente ejemplo, se muestra una evaluación de muestra que recibes cuando creas una nueva evaluación con el token nuevo obtenido del sitio web:
{ [...], "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 del resultado de la verificación | Descripción |
|---|---|
| SUCCESS_USER_VERIFIED | Se verificó correctamente al usuario. |
| ERROR_USER_NOT_VERIFIED | El usuario falló en el desafío de verificación. |
| ERROR_SITE_ONBOARDING_INCOMPLETE | Tu sitio no está incorporado adecuadamente para usar la función. |
| ERROR_RECIPIENT_NOT_ALLOWED | Este destinatario no está aprobado para enviarle 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 breve. |
| ERROR_CUSTOMER_QUOTA_EXHAUSTED | Superaste tu cuota de MFA disponible. |
| ERROR_CRITICAL_INTERNAL | La verificación no se completó debido a un error interno en nuestros sistemas. |
| RESULT_UNSPECIFIED | No hay información sobre la última verificación (nunca se verificó). |