Saltar para o conteúdo principal

Fluxo no mesmo dispositivo vs entre dispositivos

No mesmo dispositivo e entre dispositivos são as duas formas que a mesma troca assume no OpenID4VCI e no OpenID4VP: a carteira e o site num único telemóvel, com a passagem feita por um deep link ou um redirecionamento, ou o site num computador e a carteira num telemóvel, ligados por um código QR.

Num fluxo no mesmo dispositivo, a carteira e o site ou a aplicação estão no mesmo telemóvel. O site encaminha o visitante através de um deep link ou de um redirecionamento, a carteira abre, a pessoa aprova o que está a ser pedido e a carteira devolve-a ao site pelo caminho por onde veio. O OpenID4VP devolve a apresentação no fragmento desse redirecionamento, pelo que a sessão do navegador que iniciou a troca é a mesma que a conclui.

Num fluxo entre dispositivos, o visitante começa num navegador de computador, enquanto a carteira está no telemóvel. O site apresenta o pedido como um código QR, a carteira lê-o e envia o resultado diretamente para o backend do site, e não para o navegador na secretária. A página no computador tem depois de ser informada de que a troca terminou, normalmente por polling ou através de um websocket, e é por isso que um fluxo entre dispositivos envolve sempre o backend.

Ambos os protocolos partem do princípio de que suporta as duas formas. O OpenID4VP designa-as como os seus dois fluxos, e o OpenID4VCI descreve a mesma divisão para um Credential Offer, que pode chegar ao titular no dispositivo onde está a carteira ou por qualquer outro canal. O fluxo que um visitante recebe depende de onde ele está, não de uma configuração que escolhe uma vez, por isso um serviço aberto ao público precisa que ambos os caminhos funcionem.

A experiência do utilizador difere no esforço e na forma como as coisas falham. O fluxo no mesmo dispositivo é o caminho mais curto: sem segundo ecrã, sem câmara, sem passagem entre dispositivos. O fluxo entre dispositivos custa uma leitura, mas mantém o visitante no ecrã grande em que já estava a trabalhar, e é a única opção quando a carteira não está no dispositivo onde decorre o trabalho. Um fluxo no mesmo dispositivo falha quando não há carteira instalada ou o deep link abre a aplicação errada, enquanto um fluxo entre dispositivos falha quando o código expira ou o telemóvel não tem ligação.

A diferença de segurança é real e favorece o fluxo no mesmo dispositivo. Como a carteira devolve a resposta através de um redirecionamento no seu próprio dispositivo, um atacante que copie o pedido não tem forma de recolher a resposta. Uma resposta entre dispositivos viaja fora de banda até ao backend do site, pelo que é o próprio site que tem de associar o código à sessão do navegador que o mostrou. Sem essa associação, alguém pode obter um código de uma sessão que controla, colocá-lo diante de uma vítima e fazer com que as credenciais da vítima concluam o login do atacante.

Um código QR é também uma superfície de phishing, porque o código em si não mostra a quem o lê quem está a pedir. É a carteira, e não o código, que tem de mostrar a identidade do verificador e o pedido exato antes de qualquer partilha. O IETF tem uma best current practice dedicada a esta classe de ataques em fluxos entre dispositivos, e o OpenID4VCI acrescenta um código de transação a uma oferta pela mesma razão: o código chega pelo canal que já autenticou o titular, pelo que uma oferta intercetada pelo caminho não pode ser resgatada por mais ninguém.

Ler a explicação completa

Esta página dá a definição breve. A nossa explicação mostra o que significa na prática: quem está envolvido, como funciona e o que muda para a sua organização.

Fluxos no mesmo dispositivo e entre dispositivos explicados

Tenho de suportar os dois fluxos?

Se o seu serviço está aberto ao público, sim. A escolha depende de onde está o visitante e de que dispositivo tem a carteira, não de uma preferência que configura. Uma ferramenta de back office usada apenas num computador gerido pode começar só com o fluxo entre dispositivos, e uma aplicação exclusivamente móvel pode começar só com o fluxo no mesmo dispositivo, mas qualquer serviço a que um cidadão ou cliente acede nos seus próprios termos vai deparar-se com ambos.

Um fluxo entre dispositivos é menos seguro do que um no mesmo dispositivo?

Não por natureza, mas precisa de uma proteção que o fluxo no mesmo dispositivo tem de graça. No mesmo dispositivo, a resposta regressa através de um redirecionamento no dispositivo onde corre a carteira, por isso não pode ser desviada para a sessão de outra pessoa. Entre dispositivos, a resposta é enviada para o seu backend fora de banda, por isso tem de associar o código QR à sessão do navegador que o mostrou e recusar um resultado que chegue para qualquer outra sessão.

Bem implementados, os dois são equivalentes. Sem essa proteção, é o fluxo entre dispositivos que pode ser reencaminhado para uma vítima.

Voltar ao glossário