Inicio rápido
La guía de inicio rápido de verificación de identidad.
De la clave de sandbox al primer webhook firmado, en orden. Cada paso incluye un ejemplo funcional: cópielo, reemplace su propia clave y sus URL, y ejecútelo.
Paso a paso
Siete pasos, una tarde.
Obtenga una clave de sandbox
Las claves de sandbox (prefijo vk_sand_) se emiten por solicitud mientras se desarrolla el registro de autoservicio. Solicítela mediante el formulario de contacto: la mayoría de las solicitudes se resuelven el mismo día hábil. Las sesiones de sandbox nunca se facturan, así que no hay motivo para esperar.
Cree su primera sesión
Una sola llamada. Envíe un return_url (donde llega el solicitante al terminar) y un webhook_url (a donde se envía el resultado firmado). Recibirá un session_id y un verification_url.
bashcurl -X POST https://api.shieldid.ca/v1/sessions \ -H "X-Api-Key: vk_sand_your_key" \ -H "Content-Type: application/json" \ -d '{ "return_url": "https://yourapp.example/verified", "webhook_url": "https://yourapp.example/hooks/shieldid", "expected_name": "Jordan Smith", "locale": "en", "metadata": { "application_id": "app_9182" } }'Entregue el enlace al solicitante
Abra verification_url y verá la página alojada. En un navegador de escritorio muestra un código QR: al escanearlo, el mismo enlace se abre en un teléfono, que es donde ocurren la foto del documento, el desafío de prueba de vida y la selfie. Pruébelo ahora mismo en su propio teléfono.
Configure un punto de conexión de webhook
Dirija webhook_url a una ruta que acepte un POST, lea el cuerpo crudo de la solicitud (lo necesita sin procesar para comprobar la firma) y devuelva un estado 2xx. En cualquier otro caso, ShieldID reintenta la entrega hasta tres veces.
javascriptimport express from "express"; const app = express(); app.post("/hooks/shieldid", express.raw({ type: "application/json" }), (req, res) => { // Verify the signature before you trust this body — see the next step. console.log("Received a webhook:", req.body.toString()); res.status(200).send("ok"); }); app.listen(3000);Verifique la firma
No actúe sobre el cuerpo de un webhook hasta comprobar que realmente proviene de ShieldID. Calcule un HMAC-SHA256 sobre el cuerpo crudo con su secreto de webhook y compárelo con el encabezado X-Bio-Signature.
javascriptimport crypto from "node:crypto"; function isValidShieldIdSignature(rawBody, signatureHeader, secret) { const expected = crypto.createHmac("sha256", secret).update(rawBody).digest("hex"); const provided = signatureHeader || ""; const a = Buffer.from(expected, "hex"); const b = Buffer.from(provided, "hex"); return a.length === b.length && crypto.timingSafeEqual(a, b); } // rawBody must be the exact, unparsed request body app.post("/hooks/shieldid", express.raw({ type: "application/json" }), (req, res) => { const ok = isValidShieldIdSignature(req.body, req.headers["x-bio-signature"], process.env.SHIELDID_WEBHOOK_SECRET); if (!ok) return res.status(401).send("invalid signature"); const result = JSON.parse(req.body); // result.session_id, result.status, result.checks, … res.status(200).send("ok"); });Lea el resultado
La carga útil del webhook ya contiene todo lo que necesita. Si prefiere obtener el resultado por su cuenta (por ejemplo, después de una redirección), llame directamente al punto de conexión de resultados.
bashcurl https://api.shieldid.ca/v1/sessions/ses_9f2c1a/result \ -H "X-Api-Key: vk_sand_your_key" # → { "session_id": "ses_9f2c1a", "status": "VERIFIED", "checks": { "document": "PASS", … }, … }Maneje FAILED y un reintento
Una sesión que llega a FAILED incluye un failure_reason. Muestre al solicitante algo útil. Próximamente: reintentar una sesión FAILED para restablecerla a PENDING. Hoy, trate FAILED como estado final y cree una nueva sesión si el solicitante desea intentarlo de nuevo.
Antes de activar el cambio
Pase a producción.
La estructura de la solicitud nunca cambia entre sandbox y producción: solo cambia la clave. Confirme estos puntos antes de enviar a un solicitante real por una sesión vk_live_.
- Cambie vk_sand_ por una clave vk_live_. Nada más de la solicitud cambia.
- Dirija webhook_url a un punto de conexión real y siempre disponible que verifique la firma, no a un servicio de captura de solicitudes ni a una laptop.
- Maneje en su aplicación los tres estados finales: VERIFIED, FAILED y EXPIRED, no solo el camino ideal.
- Confirme que su return_url lea los parámetros de consulta session_id y status que ShieldID agrega en la redirección.
- Consulte los precios vigentes con GET /v1/pricing/{country} o en la página de precios, para que los cargos de producción no sean una sorpresa.
- Mantenga las claves de sandbox fuera de todo lo que un solicitante real pueda alcanzar: una sesión de sandbox es gratuita porque no es real.
Preguntas
Preguntas frecuentes de la guía de inicio rápido.
Comience ahora
Ejecute el primer paso ahora mismo.
Solicite una clave de sandbox, pegue el primer comando cURL en una terminal y ya llevará ventaja sobre la mayoría de las integraciones.