Implémentez la validation des messages de requête pour vous assurer que les requêtes de paiement et d'envoi de commande envoyées à votre point de terminaison de traitement proviennent de Google et pour empêcher les tiers non autorisés d'appeler votre point de terminaison.
Validation des messages à l'aide de JWT
Pour des raisons de sécurité, les requêtes envoyées à votre point de terminaison de traitement qui proviennent des serveurs de traitement de bout en bout de l'ordre contiennent un jeton Web JSON (JWT) signé dans l'en-tête Authorization
. Le jeton est généré par un service d'autorisation partagé qui peut être appelé à la fois par Google et par l'implémentation de votre point de terminaison de traitement.
- Google génère un jeton JWT signé à l'aide du service d'autorisation et de l'ID de projet de votre projet de commande de repas.
- Google envoie le jeton signé dans l'en-tête
Authorization
de chaque requête envoyée à 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 le
audience
du jeton sur l'ID de votre projet. - Vérifiez l'émetteur, l'ID de projet et d'autres informations contenues dans la charge utile du jeton pour vous assurer de leur exactitude.
Bibliothèque d'autorisation Google
Pour valider les messages d'Ordering End-to-End 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 Google Auth pour Node.js
- Bibliothèque Google Auth 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 demandes de validation
Les exemples suivants montrent comment implémenter la vérification 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"); }