Ce document explique comment intégrer les fonctionnalités WAF de reCAPTCHA à Google Cloud Armor sur les applications mobiles.
Pour terminer l'intégration, vous devez implémenter une ou plusieurs fonctionnalités de reCAPTCHA pour WAF et configurer des stratégies de sécurité Google Cloud Armor. Toutefois, vous ne pouvez implémenter que des jetons d'action reCAPTCHA pour l'intégration à Google Cloud Armor sur les applications mobiles.
Avant de commencer
Activez l'API reCAPTCHA Enterprise.
Identifiez les actions que vous souhaitez protéger.
Implémenter des jetons d'action reCAPTCHA
Vous devez exécuter reCAPTCHA sur votre application mobile pour générer des jetons d'action.
Une fois que reCAPTCHA a généré un jeton d'action, vous devez l'associer à un en-tête de requête prédéfini partout où vous devez protéger les actions utilisateur, comme checkout
. Par défaut, les jetons d'action sont valides pendant 30 minutes, mais ce délai peut varier en fonction du trafic.
Vous devez associer le jeton d'action à un en-tête de requête prédéfini avant son expiration, afin que Google Cloud Armor puisse évaluer les attributs du jeton.
Pour implémenter un jeton d'action reCAPTCHA, procédez comme suit :
Créez une clé de jeton d'action pour votre application mobile.
Console
Dans la console Google Cloud , accédez à la page reCAPTCHA.
Vérifiez que le nom de votre projet s'affiche dans le sélecteur de projet en haut de la page.
Si le nom de votre nouveau projet n'apparaît pas, cliquez sur le sélecteur de projet, puis sélectionnez votre projet.
- Cliquez sur Créer une clé.
- Dans le champ Nom à afficher, saisissez un nom à afficher pour la clé.
- Selon le type d'application pour lequel vous souhaitez créer les clés reCAPTCHA pour WAF, effectuez l'action appropriée :
- Pour le type d'application, sélectionnez iOS.
- Dans la section Liste des ID de bundle iOS, cliquez sur Ajouter un ID de bundle iOS.
Dans le champ ID du bundle, saisissez le nom de votre ID de bundle iOS.
- Facultatif : pour ajouter un ID de bundle supplémentaire, cliquez sur Ajouter un ID de bundle iOS et saisissez le nom de votre ID de bundle iOS dans le champ ID de bundle.
- Pour protéger la clé reCAPTCHA pour vos ID de bundle, assurez-vous que l'option Désactiver la validation de l'ID de bundle est désactivée.
Facultatif : Fournissez les paramètres Apple Developer.
Nous vous recommandons de fournir ces données, car elles permettent à reCAPTCHA de fournir des scores de risque plus précis pour votre trafic.
Saisissez les informations suivantes :
- Clé privée (.p8) : générée dans l'Apple Developer Center sous "Certificates, Identifiers & Profiles" (Certificats, identifiants et profils).
- Identifiant de clé : identifiant de clé Apple Developer (chaîne de 10 caractères).
- ID d'équipe : ID d'équipe Apple (chaîne de 10 caractères) propriétaire du profil de provisionnement utilisé pour créer votre application.
- Facultatif : Cliquez sur Étape suivante (facultatif).
- Pour créer une clé reCAPTCHA pour WAF, procédez comme suit :
- Dans Paramètres supplémentaires, activez
- Dans Paramètres supplémentaires, activez l'option Déploirez-vous cette clé dans un pare-feu d'application Web (WAF) ?.
- Dans les options Service, sélectionnez Cloud Armor.
- Dans les options Fonctionnalité, sélectionnez Action.
-
Pour votre environnement hors production, si vous souhaitez spécifier un score que la clé doit renvoyer lorsque des évaluations sont créées pour celui-ci, procédez comme suit :
- Dans Paramètres supplémentaires, cliquez sur le bouton Créez-vous cette clé à des fins de test uniquement ?.
- Utilisez le curseur Définir le score pour spécifier un score compris entre 0 et 1.
- Cliquez sur Créer une clé.
- Dans le champ Type d'application, sélectionnez Android.
- Dans la section Liste de packages Android, cliquez sur Ajouter un package Android.
- Dans le champ Package Android, saisissez le nom de votre package Android.
- Facultatif : pour ajouter un package supplémentaire, cliquez sur Ajouter un package Android et saisissez le nom d'un autre package Android dans le champ Package Android.
- Pour vous assurer que la clé reCAPTCHA n'est utilisée que dans votre application, désactivez l'option Désactiver la validation du nom des packages.
- Si vous souhaitez créer une clé pour une application disponible sur d'autres plates-formes de téléchargement d'applications en plus du Google Play Store, activez l'option Accepter les applications distribuées en dehors du Google Play Store.
- Facultatif : Cliquez sur Étape suivante (facultatif).
- Pour créer une clé reCAPTCHA pour WAF, procédez comme suit :
- Dans Paramètres supplémentaires, activez
- Dans Paramètres supplémentaires, activez l'option Déploirez-vous cette clé dans un pare-feu d'application Web (WAF) ?.
- Dans les options Service, sélectionnez Cloud Armor.
- Dans les options Fonctionnalité, sélectionnez Action.
-
Pour votre environnement hors production, si vous souhaitez spécifier un score que la clé doit renvoyer lorsque des évaluations sont créées pour celui-ci, procédez comme suit :
- Dans Paramètres supplémentaires, cliquez sur le bouton Créez-vous cette clé à des fins de test uniquement ?.
- Utilisez le curseur Définir le score pour spécifier un score compris entre 0 et 1.
- Cliquez sur Créer une clé.
Créer des clés reCAPTCHA pour WAF pour les applications iOS
Nous vous recommandons de créer une clé reCAPTCHA par application iOS.
La nouvelle clé est répertoriée sur la page Clés reCAPTCHA.
Créer des clés reCAPTCHA pour WAF pour les applications Android
La nouvelle clé est répertoriée sur la page Clés reCAPTCHA.
gcloud (iOS)
Pour créer des clés reCAPTCHA, utilisez la commande gcloud recaptcha keys create.
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
- DISPLAY_NAME : nom de la clé. Généralement un nom de site.
- BUNDLE_IDs : ID de bundle iOS des applications autorisées à utiliser la clé. Spécifiez plusieurs ID de bundle sous la forme d'une liste d'éléments séparés par une virgule.
- WAF_FEATURE : nom de la fonctionnalité WAF.
Spécifiez
action-token
. - WAF_SERVICE : nom du fournisseur de services WAF.
Spécifiez
CA
pour Google Cloud Armor.
Exécutez la commande gcloud recaptcha keys create :
Linux, macOS ou 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 réponse contient la clé reCAPTCHA nouvellement créée.
gcloud (Android)
Pour créer des clés reCAPTCHA, utilisez la commande gcloud recaptcha keys create.
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
- DISPLAY_NAME : nom de la clé. Généralement un nom de site.
- PACKAGE_NAMES : noms des packages Android d'applications autorisées à utiliser la clé. Spécifiez plusieurs noms de packages sous la forme d'une liste d'éléments séparés par une virgule.
- WAF_FEATURE : nom de la fonctionnalité WAF.
Spécifiez
action-token
. - WAF_SERVICE : nom du fournisseur de services WAF.
Spécifiez
CA
pour Google Cloud Armor.
Exécutez la commande gcloud recaptcha keys create :
Linux, macOS ou 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 réponse contient la clé reCAPTCHA nouvellement créée.
REST (iOS)
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- DISPLAY_NAME : nom de la clé. Généralement un nom d'application.
- BUNDLE_IDs : ID de bundle iOS des applications autorisées à utiliser la clé. Spécifiez plusieurs ID de bundle sous la forme d'une liste d'éléments séparés par une virgule.
- WAF_FEATURE : nom de la fonctionnalité WAF.
Spécifiez
action-token
. - WAF_SERVICE : nom du fournisseur de services WAF.
Spécifiez
CA
pour Google Cloud Armor.
Méthode HTTP et URL :
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys
Corps JSON de la requête :
{ "displayName": "DISPLAY_NAME", "iosSettings": { "allowedBundleIds": "BUNDLE_IDS" }, 'wafSettings': " { "wafService": "CA", "wafFeature": "ACTION_TOKEN" } }
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
, puis 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/keys"PowerShell
Enregistrez le corps de la requête dans un fichier nommé
request.json
, puis 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/keys" | Select-Object -Expand ContentVous devriez recevoir une réponse JSON de ce type :
{ "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)
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- DISPLAY_NAME : nom de la clé. Généralement un nom d'application.
- PACKAGE_NAMES : noms des packages Android d'applications autorisées à utiliser la clé. Spécifiez plusieurs noms de packages sous la forme d'une liste d'éléments séparés par une virgule.
- WAF_FEATURE : nom de la fonctionnalité WAF.
Spécifiez
action-token
. - WAF_SERVICE : nom du fournisseur de services WAF.
Spécifiez
CA
pour Google Cloud Armor.
Méthode HTTP et URL :
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys
Corps JSON de la requête :
{ "displayName": "DISPLAY_NAME", "androidSettings": { "allowedPackageNames":"PACKAGE_NAMES" }, 'wafSettings': " { "wafService": "CA", "wafFeature": "ACTION_TOKEN" } }
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
, puis 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/keys"PowerShell
Enregistrez le corps de la requête dans un fichier nommé
request.json
, puis 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/keys" | Select-Object -Expand ContentVous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/project-id/keys/6LcioSknAAAAABrjlMuZv2fjIGYMqwaAFC9izhoy", "displayName": "DISPLAY_NAME", "androidSettings": { "allowAllPackageNames": false, "allowedPackageNames": [ PACKAGE_NAMES ], "supportNonGoogleAppStoreDistribution": false }, "labels": {}, "wafSettings": { "wafService": "CA", "wafFeature": "ACTION_TOKEN" } }
Intégrez le SDK mobile reCAPTCHA à vos applications mobiles avec la clé de jeton d'action que vous avez créée. Pour obtenir des instructions, reportez-vous au document correspondant au type de votre application mobile.
- Pour Android, consultez Intégrer des clés WAF aux applications Android.
- Pour iOS, consultez Intégrer des clés WAF à des applications iOS.
Après avoir reçu le jeton de reCAPTCHA, associez-le à un en-tête de requête prédéfini au format suivant :
X-Recaptcha-Token: value-of-your-action-token
L'exemple de code suivant montre comment joindre le jeton :
Android
Exemple de code 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
Exemple de code 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) }
Configurer les stratégies de sécurité Google Cloud Armor
Après avoir implémenté les fonctionnalités de reCAPTCHA pour WAF, vous devez configurer des stratégies de sécurité Google Cloud Armor qui évaluent les jetons reCAPTCHA pour la gestion des robots.
Pour savoir comment configurer des règles de sécurité Google Cloud Armor et utiliser les clés de jeton d'action avec vos règles de sécurité, consultez Configurer des règles pour la gestion des robots.
Obtenir les scores reCAPTCHA
Pour les jetons d'action reCAPTCHA, vous pouvez obtenir des scores reCAPTCHA à partir de l'en-tête X-Recaptcha-Wafdata
.
En fonction de ces scores, vous pouvez configurer toute action personnalisée à effectuer pour les demandes des utilisateurs.
Voici un exemple d'en-tête X-Recaptcha-Wafdata
:
X-Recaptcha-Wafdata: waf_service="Google Cloud Armor", action_token;score=0.9\r\n
Vous pouvez également afficher les scores reCAPTCHA dans les journaux Google Cloud Armor.