Mettez en œuvre la validation des messages de requête pour vous assurer que les requêtes de paiement et de commande envoyées à votre point de terminaison de traitement proviennent de Google, et que des tiers non autorisés ne peuvent pas appeler votre point de terminaison.
Validation des messages à l'aide d'un jeton JWT
Les requêtes vers votre point de terminaison de traitement qui proviennent de serveurs Order with Google contiennent un jeton Web JSON (JWT) signé dans l'en-tête Authorization
pour des raisons de sécurité. Le jeton est généré par un service d'autorisation partagé qui peut être appelé par Google et par votre implémentation de point de terminaison de traitement.
- Google génère un jeton JWT signé à l'aide du service d'autorisation et de l'ID de votre projet de commande de repas.
- Google envoie le jeton signé dans l'en-tête
Authorization
de chaque requête à votre point de terminaison de traitement. - Votre point de terminaison doit décoder le jeton signé à l'aide de la bibliothèque Google Auth. Le jeton décodé contient des informations telles que l'ID du projet, l'émetteur, l'heure d'expiration et l'heure d'émission. Utilisez ces données pour déterminer l'authenticité de la requête.
Pour implémenter la validation des requêtes pour votre projet, procédez comme suit:
- Extrayez le JWT de l'en-tête
Authorization
des requêtes entrantes. - Décodez le jeton à l'aide de la bibliothèque Google Auth.
- Définissez la valeur
audience
du jeton sur votre ID de projet. - Vérifiez l'exactitude de l'émetteur, de l'ID de projet et d'autres informations contenues dans la charge utile du jeton.
Bibliothèque d'autorisation Google
Pour valider les messages de Order with Google et générer des codes d'autorisation pour les messages que votre service Web envoie à Google, utilisez la bibliothèque Google Auth dans le langage de programmation de votre choix:
- Bibliothèque d'authentification Google pour Node.js
- Bibliothèque d'authentification Google pour Python
- Bibliothèque d'authentification Google pour Java
Téléchargez et ajoutez l'une de ces bibliothèques au code d'implémentation de votre service Web.
Exemples de demande de validation
Les exemples suivants montrent comment mettre en œuvre la validation des requêtes:
Node.js
const auth = require('google-auth-library') const authClient = new auth.OAuth2Client() /** * Verifies that an incoming request came from Google. * @param {String} idToken - The ID token used to verify the request * (i.e. The value found in the Authorization header of an incoming request). * @param {String} audience - The expected audience of the request * (i.e. The project ID for your project). * @return {boolean} True if request came from Google, false otherwise. */ function isRequestFromGoogle(idToken, audience) { authClient.verifyIdToken({idToken, audience}, (err, info) => { return !(err || info['iss'] !== 'https://accounts.google.com') }) }
Python
from google.oauth2 import id_token from google.auth.transport import requests def isRequestFromGoogle(audience, token): """ Verifies that an incoming request came from Google. Args: audience (str): The expected audience of the request (i.e. The project ID for your project) token (str): The ID token used to verify the request (i.e. The value found in the Authorization header of an incoming request) Returns: True if the request came from Google, False otherwise. """ id_info = id_token.verify_oauth2_token(token, requests.Request(), audience) return id_info['iss'] == 'https://accounts.google.com'
Java
/** * Verifies that an incoming request came from Google. * @param audience The expected audience of the request * (i.e. The project ID for your project) * @param token The ID token used to verify the request * (i.e. The value found in the Authorization * header of an incoming request) * @return {@code true} if request is from Google, else {@code false} */ public boolean isRequestFromGoogle(String audience, String token) { GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier .Builder(transport, jsonFactory) .setAudience(Collections.singletonList(audience)) .build(); GoogleIdToken idToken = verifier.verify(token); if (idToken == null) return false; Payload payload = idToken.getPayload(); String issuer = (String) payload.get("iss"); return issuer.equals("https://accounts.google.com"); }