Autorisation et vérification

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.

  1. 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.
  2. Google envoie le jeton signé dans l'en-tête Authorization de chaque requête envoyée à votre point de terminaison de traitement.
  3. 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:

  1. Extrayez le JWT de l'en-tête Authorization des requêtes entrantes.
  2. Décodez le jeton à l'aide de la bibliothèque Google Auth.
  3. Définissez le audience du jeton sur l'ID de votre projet.
  4. 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:

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");
}