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:
- El emisor indica en la oferta que se requiere un
tx_code. - La wallet muestra un campo de entrada para el PIN.
- El holder introduce el código (recibido por SMS, email u otro canal del emisor).
- La wallet incluye el
tx_codeen 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:
- El emisor responde con un
acceptance_tokenen lugar de la credencial. - La wallet muestra al usuario que la credencial está pendiente.
- La wallet consulta periódicamente el endpoint
/deferred_credentialcon elacceptance_tokenhasta que el emisor emita la credencial.
Paso a paso en la wallet
- Escanea el QR — Abre la wallet y pulsa el icono de cámara, o abre el deep link desde tu navegador.
- 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.
- Introduce el PIN (si el emisor lo requiere) — El emisor te habrá enviado el código de transacción por el canal acordado.
- Pulsa "Aceptar" — La wallet solicita el token y la credencial al emisor automáticamente.
- 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.
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.