Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Introduzione
I codici a barre ruotati hanno lo stesso aspetto dei normali codici a barre, ma cambiano periodicamente
solitamente ogni minuto e il terminale/lettore è programmato per accettare
il più recente. Questa misura di sicurezza riduce i rischi associati a
screenshot del codice a barre, in particolare furto o furto di biglietti non autorizzati
rivendibili. La rotazione dei codici a barre può anche fungere da riserva per i dispositivi che non possono
sfruttare Smart Tap per il mancato supporto della tecnologia NFC (assenza di hardware oppure
disattivato).
Sul dispositivo dell'utente viene utilizzato un solo meccanismo di utilizzo alla volta, in base alla configurazione della tessera e alle funzionalità del dispositivo.
In ordine di priorità, vengono utilizzati i seguenti tipi di utilizzo:
Smart Tap: se è specificato un payload smart-tap e se il dispositivo supporta
NFC/HCE
Tieni presente che questo valore può essere ignorato dall'utente facendo clic su "Mostra codice", che forzerà la visualizzazione del codice a barre rotante/statico.
Rotazione del codice a barre: se viene specificato un payload di rotazione del codice a barre
Codice a barre statico: se viene specificato un payload del codice a barre
La specifica di più payload di riscatto può garantire il supporto di tutti gli utenti, ma potrebbe avere implicazioni per la sicurezza. In particolare, l'uso di un codice a barre statico
di riserva per un codice a barre rotante annulla la maggior parte dei vantaggi in termini di sicurezza
codici a barre rotanti. Un codice a barre di riserva statico verrà mostrato solo nelle visualizzazioni web
o su client che non supportano la rotazione dei codici a barre. A partire da oggi, prevediamo
tutti i client Google Wallet per supportare la rotazione dei codici a barre.
Salva flusso
L'API Google Wallet offre diversi flussi, tra cui:
Creare i corsi con le carte regalo in anticipo o in un momento in cui non hai fretta
Invio degli oggetti completi nel JWT o salvataggio degli oggetti prima
per poi farvi riferimento per ID nel tuo JWT
Aggiornamento degli oggetti dopo il salvataggio
Il campo rotatingBarcode proposto è compatibile con tutti questi flussi, tuttavia, per migliorare la sicurezza, consigliamo quanto segue:
Chiama l'API object:insert per inserire la tessera nella
server di Google Wallet e configura il pulsante Aggiungi a Google Wallet per
fare riferimento all'oggetto specifico per ID nel tuo JWT. Ciò garantisce che
il JWT risultante non include il codice segreto del codice a barre rotante.
Usa una chiave segreta OTP che abbia come ambito una singola tessera
La chiave, a meno che non venga aggiornata, dovrebbe essere valida per tutta la durata della tessera. Non prevediamo che questa chiave venga aggiornata con alcuna frequenza durante il normale funzionamento.
Il seguente diagramma di sequenza illustra il flusso tra i vari attori
per un'integrazione tipica:
[null,null,["Ultimo aggiornamento 2025-08-29 UTC."],[[["\u003cp\u003eRotating barcodes enhance security by changing periodically, mitigating risks associated with ticket theft or unauthorized resale.\u003c/p\u003e\n"],["\u003cp\u003eThey serve as a fallback for devices lacking NFC capabilities, ensuring accessibility for all users.\u003c/p\u003e\n"],["\u003cp\u003eGoogle Wallet prioritizes redemption methods with Smart Tap first, followed by rotating barcodes, and lastly static barcodes.\u003c/p\u003e\n"],["\u003cp\u003eFor optimal security, it's recommended to use the \u003ccode\u003eobject:insert\u003c/code\u003e API to store pass data and reference it by ID in JWTs, avoiding exposure of the rotating barcode's secret key.\u003c/p\u003e\n"],["\u003cp\u003eEach pass should ideally have a unique OTP secret key, remaining valid throughout the pass's lifespan.\u003c/p\u003e\n"]]],["Rotating barcodes change periodically (e.g., every minute) and are accepted only when current by the reader, improving security against screenshotting and ticket theft. They serve as a fallback for devices lacking NFC for Smart Tap. The `RotatingBarcode` type utilizes a TOTP algorithm with parameters like `algorithm`, `periodMillis`, and `key`. The system prioritizes redemption methods: Smart Tap, then rotating barcode, and lastly, static barcode. For optimal security, passes should be pre-inserted via the `object:insert` API.\n"],null,["# Rotating Barcodes\n\nIntroduction\n------------\n\n\nRotating barcodes look just like regular barcodes but change periodically,\ntypically every minute, and the terminal/reader is programmed to only accept\nthe most recent one. This security measure reduces the risks associated with\nbarcode screenshotting, in particular ticket theft or unauthorized ticket\nresale. Rotating barcodes can also act as a fallback for devices that can't\ntake advantage of Smart Tap, due to not supporting NFC (lack of hardware, or\nsoftware disabled).\n\n### API reference\n\n\nFor technical details about Rotating Barcodes, see the\n[`RotatingBarcode` type](/wallet/retail/gift-cards/rest/v1/RotatingBarcode).\n\n### Example payload\n\n| JSON ||\n|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|\n| ``` { \"rotatingBarcode\": { \"type\": \"QR_CODE\", \"valuePattern\": \"MyRotatingBarcode-{totp_timestamp_seconds}-{totp_value_0}\", \"alternateText\": \"Ticket#: 1234567890\", \"totpDetails\": { \"algorithm\": \"TOTP_SHA1\", \"periodMillis\": \"3000\", \"parameters\": [ { \"key\": \"3132333435363738393031323334353637383930\", \"valueLength\": \"8\" } ] } } } ``` |\n\nFallback Mechanisms\n-------------------\n\n\nOn the user device, only one redemption mechanism is used at a given time,\ndepending on how the pass is configured and on the capabilities of the device.\nIn the order of priority, the following redemption types are used:\n\n1. Smart Tap: If a smart-tap payload is specified and if the device supports NFC/HCE\n - Note, this can be overridden by the user by clicking \"Show code,\" which will force the display of the rotating barcode/static barcode.\n2. Rotating barcode: If a rotating barcode payload is specified\n3. Static barcode: If a barcode payload is specified\n\n\nSpecifying multiple redemption payloads can ensure all users are supported but\nmay have security implications. In particular, using a static barcode as a\nfallback for a rotating barcode negates most of the security benefits of using\nrotating barcodes. A static barcode fallback will only be shown in web views\nor on clients that do not support rotating barcodes. As of today, we expect\nall Google Wallet clients to support rotating barcodes.\n\nSave Flow\n---------\n\nThe Google Wallet API offers several flows, including:\n\n- Creating the gift card classes at save time, or ahead of time\n- Sending the complete objects in your JWT, or saving the objects ahead of time then referencing them by ID in your JWT\n- Updating the objects after they have been saved\n\n\nThe proposed rotatingBarcode field is compatible with all these flows,\nhowever, in order to improve security, we suggest the following:\n\n- Call the `object:insert` API to insert the pass to the Google Wallet server and configure the Add to Google Wallet button to reference the specific object by ID in your JWT. This ensures that the resulting JWT does not include the secret key of the rotating barcode.\n- Use an OTP secret key that is scoped to a single pass\n- The key, unless it is updated, is expected to be valid for the lifespan of the pass. We do not expect this key to be updated on any frequency during the course of normal operation.\n\n\nThe following sequence diagram illustrates the flow between the various actors\nfor a typical integration:"]]