Saltar al contenido principal

Recibir una credencial

La wallet recibe credenciales de emisores acreditados en ISBE mediante el protocolo OID4VCI 1.0 (OpenID for Verifiable Credential Issuance), usando exclusivamente el flujo pre-autorizado (pre-authorized code flow).

Cómo inicia el emisor la oferta

El emisor genera una solicitud de credencial (credential offer) y la entrega al holder de una de estas dos formas:

  • Código QR: el holder escanea el QR con la cámara de la wallet.
  • Deep link: el holder pulsa un enlace en el navegador o en una aplicación. El esquema del enlace es openid-credential-offer://.

Ambas formas codifican el mismo mensaje: la URL del credential_offer o el objeto JSON de la oferta directamente.

Flujo completo

Con código de transacción (tx_code)

Si el emisor requiere un PIN adicional (código de transacción), el flujo incluye un paso extra antes de solicitar el token:

  1. El emisor indica en la oferta que se requiere un tx_code.
  2. La wallet muestra un campo de entrada para el PIN.
  3. El holder introduce el código (recibido por SMS, email u otro canal del emisor).
  4. La wallet incluye el tx_code en la petición al endpoint /token.

Emisión diferida (deferred issuance)

Algunos emisores no pueden emitir la credencial de forma inmediata (por ejemplo, porque requieren una verificación manual). En ese caso:

  1. El emisor responde con un acceptance_token en lugar de la credencial.
  2. La wallet muestra al usuario que la credencial está pendiente.
  3. La wallet consulta periódicamente el endpoint /deferred_credential con el acceptance_token hasta que el emisor emita la credencial.

Paso a paso en la wallet

  1. Escanea el QR — Abre la wallet y pulsa el icono de cámara, o abre el deep link desde tu navegador.
  2. Revisa la oferta — La wallet muestra el tipo de credencial que vas a recibir y el emisor que la emite. Verifica que el emisor es quien esperas.
  3. Introduce el PIN (si el emisor lo requiere) — El emisor te habrá enviado el código de transacción por el canal acordado.
  4. Pulsa "Aceptar" — La wallet solicita el token y la credencial al emisor automáticamente.
  5. Credencial guardada — La credencial aparece en tu lista de credenciales. Se almacena cifrada en el dispositivo.

Verificar una credencial recibida

Puedes ver los atributos de una credencial pulsando sobre ella en la lista. La wallet muestra:

  • El tipo de credencial y el emisor.
  • Los atributos del credentialSubject.
  • La fecha de emisión y la fecha de expiración (validUntil/exp), si el emisor las ha incluido.
Validación de firma

La wallet verifica la firma del emisor en el momento de la recepción. Rechazará credenciales cuya firma no sea válida o cuyo emisor no pueda resolverse. La wallet no verifica el estado de revocación de la credencial (el campo credentialStatus no se comprueba).

Formato soportado

La wallet acepta credenciales en formato jwt_vc_json. No acepta vc+sd-jwt ni ldp_vc. Si el emisor ofrece un formato no soportado, la wallet rechazará la oferta con un mensaje de error.

Para integradores: estructura del credential_offer

El objeto credential_offer que el emisor debe generar para ser compatible con la wallet ISBE tiene la siguiente estructura:

{
"credential_issuer": "https://issuer.ejemplo.redisbe.com",
"credentials": ["NombreDelTipoDeCredencial"],
"grants": {
"urn:ietf:params:oauth:grant-type:pre-authorized_code": {
"pre-authorized_code": "SplxlOBeZQQYbYS6WxSbIA",
"tx_code": {
"length": 6,
"input_mode": "numeric",
"description": "Introduce el código recibido por SMS"
}
}
}
}

El campo tx_code es opcional. Si no se requiere PIN, omite el campo completo.

Consulta la Referencia OID4VCI/VP para la especificación detallada de los endpoints del emisor.