Autorisation et validation

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.

  1. 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.
  2. Google envoie le jeton signé dans l'en-tête Authorization de chaque requête à 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 la valeur audience du jeton sur votre ID de projet.
  4. 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:

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