Cette page explique comment créer une évaluation pour permettre à votre backend de vérifier l'authenticité du jeton envoyé par reCAPTCHA Enterprise. reCAPTCHA Enterprise envoie une réponse chiffrée, le jeton de réponse reCAPTCHA (jeton), lorsque l'utilisateur final déclenche une action.
Vous devez créer une évaluation pour évaluer les résultats de execute()
dans votre backend en envoyant le jeton généré au point de terminaison d'évaluation.
reCAPTCHA Enterprise traite le jeton envoyé, et indique sa validité et son score.
Le premier million d'évaluations mensuelles de reCAPTCHA Enterprise est gratuit. Pour continuer à créer des évaluations lorsque vous atteignez la limite d'utilisation mensuelle gratuite (un million d'évaluations par mois), vous devez activer la facturation pour votre projet Google Cloud. Pour en savoir plus sur la facturation de reCAPTCHA Enterprise, consultez la section Informations de facturation.
Avant de commencer
- Préparez votre environnement pour reCAPTCHA Enterprise.
- Assurez-vous de disposer du rôle Identity and Access Management suivant : Agent reCAPTCHA Enterprise (
roles/recaptchaenterprise.agent
). - Installez des clés basées sur des scores sur votre application iOS ou sur votre application Android.
-
Configurez l'authentification auprès de reCAPTCHA Enterprise.
La méthode d'authentification que vous choisissez dépend de l'environnement dans lequel reCAPTCHA Enterprise est configuré. Le tableau suivant vous aide à choisir la méthode d'authentification appropriée et l'interface compatible pour configurer l'authentification:
Environnement Interface Méthode d'authentification Google Cloud - REST
- Bibliothèques clientes
Utilisez les comptes de service associés. Sur site ou via un autre fournisseur de services cloud REST Utilisez des clés API ou la fédération d'identité de charge de travail. Si vous souhaitez utiliser des clés API, nous vous recommandons de les sécuriser en appliquant des restrictions de clés API.
Bibliothèques clientes Utilisez les ressources suivantes :
- Pour Python ou Java, utilisez des clés API ou la fédération d'identité de charge de travail.
Si vous souhaitez utiliser des clés API, nous vous recommandons de les sécuriser en appliquant des restrictions de clés API.
- Pour les autres langages, utilisez la fédération d'identité de charge de travail.
Récupérer un jeton
Récupérez un jeton à partir de la réponse à l'appel execute()
.
Vous ne pouvez accéder au jeton de chaque utilisateur qu'une seule fois.
Si vous devez évaluer une action ultérieure d'un utilisateur dans votre application mobile ou si un jeton expire avant la création d'une évaluation, vous devez appeler à nouveau execute()
pour générer un nouveau jeton.
Créer une évaluation
Après avoir configuré l'authentification, créez une évaluation en envoyant une requête à l'API reCAPTCHA Enterprise ou en utilisant les bibliothèques clientes reCAPTCHA Enterprise.
Pour améliorer la détection, nous vous recommandons de transmettre les valeurs supplémentaires suivantes lorsque vous créez des évaluations: userAgent
, userIpAddress
et ja3
.
API REST
Créez une évaluation en envoyant une requête à l'API reCAPTCHA Enterprise. Vous pouvez vous authentifier à l'aide de la gcloud CLI ou de la clé API.
Utiliser la CLI gcloud
Créez une évaluation à l'aide de la méthode projects.assessments.create
. Envoyez cette requête au point de terminaison de l'API v1
.
Avant d'utiliser les données de requête, effectuez les remplacements suivants:
- PROJECT_ID : ID de votre projet Google Cloud
- TOKEN : jeton renvoyé par l'appel
grecaptcha.enterprise.execute()
- KEY_ID: clé reCAPTCHA associée au site ou à l'application. Pour en savoir plus, consultez Clés reCAPTCHA.
- USER_AGENT: user-agent de la requête provenant de l'appareil de l'utilisateur
- USER_IP_ADDRESS: adresse IP dans la requête provenant de l'appareil de l'utilisateur.
- JA3: empreinte JA3 du client SSL. Pour le calcul de JA3, nous vous recommandons d'utiliser salesforce/ja3.
- USER_ACTION: action déclenchée par l'utilisateur que vous avez spécifiée pour
action
dans l'appelgrecaptcha.enterprise.execute()
(par exemple,login
).Pour en savoir plus, consultez la section Noms des actions.
Méthode HTTP et URL :
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments
Corps JSON de la requête :
{ "event": { "token": "TOKEN", "siteKey": "KEY_ID", "userAgent": "USER_AGENT", "userIpAddress": "USER_IP_ADDRESS", "ja3": "JA3", "expectedAction": "USER_ACTION" } }
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Enregistrez le corps de la requête dans un fichier nommé request.json
et exécutez la commande suivante:
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
Enregistrez le corps de la requête dans un fichier nommé request.json
et exécutez la commande suivante:
$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
Vous devriez recevoir une réponse JSON de ce type :
{ "tokenProperties": { "valid": true, "com.example.app" or "iosBundleId": "com.example.app", "action": "homepage", "createTime": "2019-03-28T12:24:17.894Z" }, "riskAnalysis": { "score": 0.1, "reasons": ["AUTOMATION"] }, "event": { "token": "TOKEN", "siteKey": "KEY_ID", "userAgent": "USER_AGENT", "userIpAddress": "USER_IP_ADDRESS", "ja3": "JA3", "expectedAction": "USER_ACTION" }, "name": "projects/PROJECT_NUMBER/assessments/b6ac310000000000" }
Nous vous recommandons d'utiliser des analyseurs JSON en mode d'analyse non stricte pour éviter toute indisponibilité, le cas échéant, si des champs supplémentaires sont ajoutés à la réponse JSON.
Utiliser une clé API
Créez une évaluation à l'aide de la méthode projects.assessments.create
. Envoyez cette requête au point de terminaison de l'API v1
.
Avant d'utiliser les données de requête, effectuez les remplacements suivants:
- API_KEY : clé API associée au projet en cours
- PROJECT_ID : ID de votre projet Google Cloud
- TOKEN : jeton renvoyé par l'appel
grecaptcha.enterprise.execute()
- KEY_ID: clé reCAPTCHA associée au site ou à l'application. Pour en savoir plus, consultez Clés reCAPTCHA.
- USER_AGENT: user-agent de la requête provenant de l'appareil de l'utilisateur
- USER_IP_ADDRESS: adresse IP dans la requête provenant de l'appareil de l'utilisateur.
- JA3: empreinte JA3 du client SSL. Pour le calcul de JA3, nous vous recommandons d'utiliser salesforce/ja3.
- USER_ACTION: action déclenchée par l'utilisateur que vous avez spécifiée pour
action
dans l'appelgrecaptcha.enterprise.execute()
(par exemple,login
).Pour en savoir plus, consultez la section Noms des actions.
Méthode HTTP et URL :
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY
Corps JSON de la requête :
{ "event": { "token": "TOKEN", "siteKey": "KEY_ID", "userAgent": "USER_AGENT", "userIpAddress": "USER_IP_ADDRESS", "ja3": "JA3", "expectedAction": "USER_ACTION" } }
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Enregistrez le corps de la requête dans un fichier nommé request.json
et exécutez la commande suivante:
curl -X POST \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY"
PowerShell
Enregistrez le corps de la requête dans un fichier nommé request.json
et exécutez la commande suivante:
$headers = @{ }
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?key=API_KEY" | Select-Object -Expand Content
Vous devriez recevoir une réponse JSON de ce type :
{ "tokenProperties": { "valid": true, "hostname": "www.google.com", "action": "homepage", "createTime": "2019-03-28T12:24:17.894Z" }, "riskAnalysis": { "score": 0.1, "reasons": ["AUTOMATION"] }, "event": { "token": "TOKEN", "siteKey": "KEY_ID", "userAgent": "USER_AGENT", "userIpAddress": "USER_IP_ADDRESS", "ja3": "JA3", "expectedAction": "USER_ACTION" }, "name": "projects/PROJECT_NUMBER/assessments/b6ac310000000000" }
Nous vous recommandons d'utiliser des analyseurs JSON en mode d'analyse non stricte pour éviter toute indisponibilité, le cas échéant, si des champs supplémentaires sont ajoutés à la réponse JSON.
C#
using System; using Google.Api.Gax.ResourceNames; using Google.Cloud.RecaptchaEnterprise.V1; public class CreateAssessmentSample { // Create an assessment to analyze the risk of a UI action. // projectID: Google Cloud project ID. // recaptchaKey: reCAPTCHA key obtained by registering a domain or an app to use reCAPTCHA Enterprise. // token: The token obtained from the client on passing the recaptchaKey. // recaptchaAction: Action name corresponding to the token. public void createAssessment(string projectID = "project-id", string recaptchaKey = "recaptcha-key", string token = "action-token", string recaptchaAction = "action-name") { // Create the client. // TODO: To avoid memory issues, move this client generation outside // of this example, and cache it (recommended) or call client.close() // before exiting this method. RecaptchaEnterpriseServiceClient client = RecaptchaEnterpriseServiceClient.Create(); ProjectName projectName = new ProjectName(projectID); // Build the assessment request. CreateAssessmentRequest createAssessmentRequest = new CreateAssessmentRequest() { Assessment = new Assessment() { // Set the properties of the event to be tracked. Event = new Event() { SiteKey = recaptchaKey, Token = token, ExpectedAction = recaptchaAction }, }, ParentAsProjectName = projectName }; Assessment response = client.CreateAssessment(createAssessmentRequest); // Check if the token is valid. if (response.TokenProperties.Valid == false) { System.Console.WriteLine("The CreateAssessment call failed because the token was: " + response.TokenProperties.InvalidReason.ToString()); return; } // Check if the expected action was executed. if (response.TokenProperties.Action != recaptchaAction) { System.Console.WriteLine("The action attribute in reCAPTCHA tag is: " + response.TokenProperties.Action.ToString()); System.Console.WriteLine("The action attribute in the reCAPTCHA tag does not " + "match the action you are expecting to score"); return; } // Get the risk score and the reasons. // For more information on interpreting the assessment, // see: https://cloud.google.com/recaptcha/docs/interpret-assessment System.Console.WriteLine("The reCAPTCHA score is: " + ((decimal)response.RiskAnalysis.Score)); foreach (RiskAnalysis.Types.ClassificationReason reason in response.RiskAnalysis.Reasons) { System.Console.WriteLine(reason.ToString()); } } public static void Main(string[] args) { new CreateAssessmentSample().createAssessment(); } }
Go
import ( "context" "fmt" recaptcha "cloud.google.com/go/recaptchaenterprise/apiv1" recaptchapb "google.golang.org/genproto/googleapis/cloud/recaptchaenterprise/v1" ) func main() { // TODO(developer): Replace these variables before running the sample. projectID := "project-id" recaptchaKey := "recaptcha-key" token := "action-token" recaptchaAction := "action-name" createAssessment(projectID, recaptchaKey, token, recaptchaAction) } /** * Create an assessment to analyze the risk of a UI action. * * @param projectID: Google Cloud project ID * @param recaptchaKey: reCAPTCHA key obtained by registering a domain or an app to use the services of reCAPTCHA Enterprise. * @param token: The token obtained from the client on passing the recaptchaKey. * @param recaptchaAction: Action name corresponding to the token. */ func createAssessment(projectID string, recaptchaKey string, token string, recaptchaAction string) { // Create the recaptcha client. // TODO: To avoid memory issues, move this client generation outside // of this example, and cache it (recommended) or call client.close() // before exiting this method. ctx := context.Background() client, err := recaptcha.NewClient(ctx) if err != nil { fmt.Printf("Error creating reCAPTCHA client\n") } defer client.Close() // Set the properties of the event to be tracked. event := &recaptchapb.Event{ Token: token, SiteKey: recaptchaKey, } assessment := &recaptchapb.Assessment{ Event: event, } // Build the assessment request. request := &recaptchapb.CreateAssessmentRequest{ Assessment: assessment, Parent: fmt.Sprintf("projects/%s", projectID), } response, err := client.CreateAssessment( ctx, request) if err != nil { fmt.Printf("%v", err.Error()) } // Check if the token is valid. if response.TokenProperties.Valid == false { fmt.Printf("The CreateAssessment() call failed because the token"+ " was invalid for the following reasons: %v", response.TokenProperties.InvalidReason) return } // Check if the expected action was executed. if response.TokenProperties.Action == recaptchaAction { // Get the risk score and the reason(s). // For more information on interpreting the assessment, // see: https://cloud.google.com/recaptcha/docs/interpret-assessment fmt.Printf("The reCAPTCHA score for this token is: %v", response.RiskAnalysis.Score) for _,reason := range response.RiskAnalysis.Reasons { fmt.Printf(reason.String()+"\n") } return } fmt.Printf("The action attribute in your reCAPTCHA tag does " + "not match the action you are expecting to score") }
Java
Node.js
const {RecaptchaEnterpriseServiceClient} = require('@google-cloud/recaptcha-enterprise'); /** * Create an assessment to analyze the risk of a UI action. Note that * this example does set error boundaries and returns `null` for * exceptions. * * projectID: Google Cloud project ID * recaptchaKey: reCAPTCHA key obtained by registering a domain or an app to use the services of reCAPTCHA Enterprise. * token: The token obtained from the client on passing the recaptchaKey. * recaptchaAction: Action name corresponding to the token. */ async function createAssessment({ projectID = "your-project-id", recaptchaKey = "your-recaptcha-key", token = "action-token", recaptchaAction = "action-name", }) { // Create the reCAPTCHA client & set the project path. There are multiple // ways to authenticate your client. For more information see: // https://cloud.google.com/docs/authentication // TODO: To avoid memory issues, move this client generation outside // of this example, and cache it (recommended) or call client.close() // before exiting this method. const client = new RecaptchaEnterpriseServiceClient(); const projectPath = client.projectPath(projectID); // Build the assessment request. const request = ({ assessment: { event: { token: token, siteKey: recaptchaKey, }, }, parent: projectPath, }); // client.createAssessment() can return a Promise or take a Callback const [ response ] = await client.createAssessment(request); // Check if the token is valid. if (!response.tokenProperties.valid) { console.log("The CreateAssessment call failed because the token was: " + response.tokenProperties.invalidReason); return null; } // Check if the expected action was executed. // The `action` property is set by user client in the // grecaptcha.enterprise.execute() method. if (response.tokenProperties.action === recaptchaAction) { // Get the risk score and the reason(s). // For more information on interpreting the assessment, // see: https://cloud.google.com/recaptcha/docs/interpret-assessment console.log("The reCAPTCHA score is: " + response.riskAnalysis.score); response.riskAnalysis.reasons.forEach((reason) => { console.log(reason); }); return response.riskAnalysis.score; } else { console.log("The action attribute in your reCAPTCHA tag " + "does not match the action you are expecting to score"); return null; } }
PHP
<?php // Include Google Cloud dependencies using Composer // composer require google/cloud-recaptcha-enterprise require 'vendor/autoload.php'; use Google\Cloud\RecaptchaEnterprise\V1\RecaptchaEnterpriseServiceClient; use Google\Cloud\RecaptchaEnterprise\V1\Event; use Google\Cloud\RecaptchaEnterprise\V1\Assessment; use Google\Cloud\RecaptchaEnterprise\V1\TokenProperties\InvalidReason; /** * Create an assessment to analyze the risk of a UI action. * @param string $siteKey The key ID for the reCAPTCHA key (See https://cloud.google.com/recaptcha/docs/create-key) * @param string $token The user's response token for which you want to receive a reCAPTCHA score. (See https://cloud.google.com/recaptcha/docs/create-assessment#retrieve_token) * @param string $project Your Google Cloud project ID */ function create_assessment( string $siteKey, string $token, string $project ): void { // TODO: To avoid memory issues, move this client generation outside // of this example, and cache it (recommended) or call client.close() // before exiting this method. $client = new RecaptchaEnterpriseServiceClient(); $projectName = $client->projectName($project); $event = (new Event()) ->setSiteKey($siteKey) ->setToken($token); $assessment = (new Assessment()) ->setEvent($event); try { $response = $client->createAssessment( $projectName, $assessment ); // You can use the score only if the assessment is valid, // In case of failures like re-submitting the same token, getValid() will return false if ($response->getTokenProperties()->getValid() == false) { printf('The CreateAssessment() call failed because the token was invalid for the following reason: '); printf(InvalidReason::name($response->getTokenProperties()->getInvalidReason())); } else { printf('The score for the protection action is:'); printf($response->getRiskAnalysis()->getScore()); // Optional: You can use the following methods to get more data about the token // Action name provided at token generation. // printf($response->getTokenProperties()->getAction() . PHP_EOL); // The timestamp corresponding to the generation of the token. // printf($response->getTokenProperties()->getCreateTime()->getSeconds() . PHP_EOL); // The hostname of the page on which the token was generated. // printf($response->getTokenProperties()->getHostname() . PHP_EOL); } } catch (exception $e) { printf('CreateAssessment() call failed with the following error: '); printf($e); } } // TODO(Developer): Replace the following before running the sample create_assessment( 'YOUR_RECAPTCHA_KEY', 'YOUR_USER_RESPONSE_TOKEN', 'YOUR_GOOGLE_CLOUD_PROJECT_ID' ); ?>
Python
Ruby
Étapes suivantes
- Interprétez une évaluation et prenez les mesures nécessaires pour votre application mobile en fonction du score.