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.
- Google genera un JWT firmato utilizzando il servizio di autorizzazione e l'ID progetto del tuo progetto Ordinazione di cibo.
- Google invia il token firmato nell'intestazione
Authorization
di ogni richiesta all'endpoint di evasione. - 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:
- Estrai il JWT dall'intestazione
Authorization
delle richieste in arrivo. - Decodifica il token utilizzando la libreria di autenticazione Google.
- Imposta il
audience
del token sul tuo ID progetto. - 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:
- Libreria di autenticazione Google per Node.js
- Libreria di autenticazione Google per Python
- Libreria di autenticazione Google per Java
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"); }