Fluxo de Verificação (Visão Geral)

Objetivo

Entender o ciclo completo de uma verificação de idade, do início ao resultado.

Fluxo Ponta a Ponta (Cross-Device — QR Code)

sequenceDiagram
    participant U as Usuário (Desktop)
    participant SDK as App React + SDK
    participant VS as INJI Verify Service
    participant W as Carteira Digital (Celular)

    U->>SDK: Clica "Verificar Idade"
    SDK->>VS: POST /v1/verify/vp-request
    VS-->>SDK: transactionId + requestId + authorizationDetails
    SDK->>U: Exibe QR Code (authorizationDetails)
    U->>W: Escaneia QR Code com a Carteira
    W->>VS: Apresenta credencial (VP submission)
    VS->>VS: Valida credencial + policy 18+
    Note over SDK,VS: SDK faz long-polling em /vp-request/{id}/status
    VS-->>SDK: Resultado da verificação
    SDK->>U: "Idade verificada!" (callback)

O que o SDK faz internamente

O INJI Verify SDK gerencia todo o ciclo:

  1. Cria a VP Request — chama POST /v1/verify/vp-request com a Presentation Definition
  2. Detecta o dispositivo — se mobile (com isSameDeviceFlowEnabled: true), usa Deep Link; se desktop, renderiza QR Code
  3. Long-polling — consulta GET /v1/verify/vp-request/{id}/status repetidamente até receber o resultado ou expirar (timeout padrão: 55s)
  4. Busca resultado — quando a Wallet envia a credencial, obtém o resultado via GET /v1/verify/vp-result/{id}
  5. Dispara callback — chama onVPProcessed(results) ou onError() em caso de falha

Você não precisa implementar nenhuma dessas etapas manualmente.

Estados da Verificação

Estado Significado
VP Request criada Aguardando apresentação da credencial
VP submetida Carteira enviou a credencial ao Service
SUCCESS Credencial válida e policy satisfeita
INVALID Credencial inválida (assinatura, emissor, formato)
EXPIRED Credencial ou sessão expirada

Callbacks do SDK

O SDK oferece quatro callbacks para gerenciar o fluxo:

onVPProcessed(results)

Retorna o resultado completo diretamente no frontend.

<OpenID4VPVerification
  // ...
  onVPProcessed={(results) => {
    const ok = results.some(r => r.vcStatus === 'SUCCESS');
    console.log('Verificado:', ok);
  }}
/>

onError(error) — Tratamento de erros

Chamado quando ocorre um erro na verificação.

<OpenID4VPVerification
  // ...
  onError={(error) => {
    console.error('Erro na verificação:', error);
  }}
/>

onQrCodeExpired() — QR Code expirado

Chamado quando o QR Code expira (apenas em fluxo cross-device).

<OpenID4VPVerification
  // ...
  onQrCodeExpired={() => {
    console.log('QR Code expirou');
    // Resetar UI ou permitir nova tentativa
  }}
/>
Aviso

onVPProcessed expõe o resultado diretamente no frontend. Para maior segurança em produção, valide o resultado no backend usando o transactionId.

Propriedades principais do componente

Propriedade Tipo Descrição
verifyServiceUrl string URL base do INJI Verify Service
clientId string DID do cliente (ex: did:web:localhost:v1:verify)
protocol string Protocolo OpenID4VP (ex: openid4vp://)
isSameDeviceFlowEnabled boolean Se true, usa Deep Link; se false, renderiza QR Code
presentationDefinition object Define quais credenciais são aceitas
onVPProcessed function Callback com resultado completo
onError function Callback para erros
onQrCodeExpired function Callback quando QR Code expira

Próximo passo

Escolha sua jornada: