Autorisation et vérification

Mettez en œuvre la validation des messages de requête pour vous assurer que les demandes de règlement et d'envoi de commandes à votre point de terminaison de traitement proviennent de Google, et pour empêcher des tiers non autorisés d'appeler votre point de terminaison.

Validation du message à l'aide d'un jeton JWT

Les requêtes envoyées à votre point de terminaison de traitement provenant de serveurs de commande de bout en bout 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é pouvant être appelé à la fois par Google et par votre mise en œuvre du 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, le délai 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 demandes pour votre projet, procédez comme suit:

  1. Extrayez le jeton 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'exactitude de l'émetteur, de l'ID du projet et des autres informations contenues dans la charge utile du jeton.

Bibliothèque Google Authorization

Pour valider les messages du service Ordering de bout en bout 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 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");
}