Vai al contenuto principale

Flusso same-device e cross-device

Same-device e cross-device sono le due forme che lo stesso scambio assume in OpenID4VCI e OpenID4VP: wallet e sito sullo stesso telefono, con il passaggio affidato a un deep link o a un reindirizzamento, oppure il sito su un computer e il wallet su un telefono, collegati da un codice QR.

In un flusso same-device il wallet e il sito web o l'app si trovano sullo stesso telefono. Il sito passa il visitatore al wallet con un deep link o un reindirizzamento, il wallet si apre, la persona approva ciò che viene richiesto e il wallet la riporta sul sito per la stessa strada. OpenID4VP restituisce la presentazione nel fragment di quel reindirizzamento, quindi la sessione del browser che ha avviato lo scambio è la stessa che lo conclude.

In un flusso cross-device il visitatore parte dal browser di un computer mentre il wallet si trova sul suo telefono. Il sito presenta la richiesta come codice QR, il wallet lo scansiona e invia il risultato direttamente al backend del sito invece che al browser sulla scrivania. La pagina sul computer deve poi essere avvisata che lo scambio è concluso, di solito tramite polling o una websocket, ed è per questo che un flusso cross-device coinvolge sempre il backend.

Entrambi i protocolli presuppongono che supportiate entrambe le forme. OpenID4VP le indica come i suoi due flussi, e OpenID4VCI descrive la stessa distinzione per un Credential Offer, che può raggiungere il titolare sul dispositivo su cui si trova il wallet o tramite qualsiasi altro canale. Quale dei due tocchi a un visitatore dipende da dove si trova in quel momento, non da un'impostazione scelta una volta per tutte, quindi un servizio rivolto al pubblico ha bisogno che funzionino entrambi i percorsi.

L'esperienza utente cambia per impegno richiesto e per modalità di errore. Il flusso same-device è il percorso più breve: nessun secondo schermo, nessuna fotocamera, nessun passaggio da un dispositivo all'altro. Il flusso cross-device costa una scansione, ma lascia il visitatore sullo schermo grande su cui stava già lavorando, ed è l'unica opzione quando il wallet non si trova sul dispositivo in uso. Un flusso same-device si interrompe quando non c'è un wallet installato o il deep link apre l'app sbagliata, mentre un flusso cross-device si interrompe quando il codice scade o il telefono non ha connessione.

La differenza di sicurezza è reale e favorisce il same-device. Poiché il wallet restituisce la risposta tramite un reindirizzamento sul proprio dispositivo, un attaccante che copia la richiesta non ha modo di raccogliere la risposta. Una risposta cross-device viaggia fuori banda verso il backend del sito, quindi è il sito stesso a dover legare il codice alla sessione del browser che l'ha mostrato. Senza questo legame qualcuno può prendere un codice da una sessione che controlla, metterlo davanti a una vittima e far completare il proprio login con le credenziali della vittima.

Un codice QR è anche una superficie di phishing, perché il codice di per sé non dice nulla a chi lo legge su chi sta chiedendo. È il wallet, non il codice, a dover mostrare l'identità del verificatore e la richiesta esatta prima che venga condiviso qualsiasi dato. L'IETF ha una best current practice dedicata a questa classe di attacchi nei flussi cross-device, e OpenID4VCI aggiunge un codice di transazione a un'offerta per lo stesso motivo: il codice arriva sul canale che ha già autenticato il titolare, così un'offerta intercettata lungo il percorso non può essere riscattata da nessun altro.

Leggi la spiegazione completa

Questa pagina offre la definizione breve. La nostra spiegazione mostra che cosa significa in pratica: chi è coinvolto, come funziona e che cosa cambia per la vostra organizzazione.

Flussi same-device e cross-device spiegati

Devo supportare entrambi i flussi?

Se il vostro servizio è aperto al pubblico, sì. La scelta dipende da dove si trova il visitatore e da quale dispositivo contiene il suo wallet, non da una preferenza che configurate voi. Uno strumento di back office usato solo da computer gestiti può partire solo cross-device, e un'app solo mobile può partire solo same-device, ma qualsiasi servizio che un cittadino o un cliente raggiunge alle proprie condizioni li incontrerà entrambi.

Un flusso cross-device è meno sicuro di uno same-device?

Non di per sé, ma richiede una protezione che il same-device ha gratis. In un flusso same-device la risposta torna tramite un reindirizzamento sul dispositivo su cui gira il wallet, quindi non può essere dirottata sulla sessione di qualcun altro. In un flusso cross-device la risposta viene inviata al vostro backend fuori banda, quindi dovete legare il codice QR alla sessione del browser che l'ha mostrato e rifiutare un risultato che arriva per qualsiasi altra sessione.

Se implementati correttamente, i due sono paragonabili. Se questo passaggio viene saltato, è il flusso cross-device quello che può essere inoltrato a una vittima.

Torna al glossario