Autorizzazione e verifica

Implementa la verifica dei messaggi di richiesta per assicurarti che le richieste di pagamento e di invio dell'ordine all'endpoint di evasione ordine provengano da Google e impediscano a terze parti non autorizzate di chiamare l'endpoint.

Verifica dei messaggi tramite JWT

Le richieste al tuo endpoint di evasione degli ordini provenienti dai server di Ordina con Google contengono un token web JSON (JWT) firmato nell'intestazione Authorization per motivi di sicurezza. Il token viene generato da un servizio di autorizzazione condiviso che può essere chiamato sia da Google che dall'implementazione dell'endpoint di evasione.

  1. Google genera un JWT firmato utilizzando il servizio di autorizzazione e l'ID progetto del tuo progetto Ordinazione di cibo.
  2. Google invia il token firmato nell'intestazione Authorization di ogni richiesta all'endpoint di evasione.
  3. Il tuo endpoint deve decodificare il token firmato utilizzando la libreria di autenticazione Google. Il token decodificato contiene dettagli come l'ID progetto, l'emittente, la data di scadenza e l'ora di emissione. Utilizza questi dati per determinare l'autenticità della richiesta.

Per implementare la verifica delle richieste per il tuo progetto:

  1. Estrai il JWT dall'intestazione Authorization delle richieste in arrivo.
  2. Decodifica il token utilizzando la libreria di autenticazione Google.
  3. Imposta il audience del token sul tuo ID progetto.
  4. Verifica l'accuratezza dell'emittente, dell'ID progetto e di altre informazioni contenute nel payload del token.

Libreria autorizzazioni Google

Per verificare i messaggi provenienti da Ordina con Google e per generare i codici di autorizzazione per i messaggi inviati dal tuo servizio web a Google, utilizza la libreria di autenticazione Google nel linguaggio di programmazione che preferisci:

Scarica e aggiungi una di queste librerie al tuo codice di implementazione del servizio web.

Richiedi esempi di verifica

I seguenti esempi mostrano come implementare la verifica delle richieste:

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