Skip to content

Latest commit

 

History

History
61 lines (46 loc) · 1.89 KB

File metadata and controls

61 lines (46 loc) · 1.89 KB
title Gestionar secretos
description Rotar secretos de consumidor y validar cada entrega de Chainhooks

Lo que aprenderás

:::objectives

  • Crear/rotar un secreto de consumidor de Chainhooks.
  • Valida las solicitudes de webhook verificando el Authorization cabecera. :::

Requisitos previos

:::prerequisites

  • Clave API de Hiro
  • Node.js (el ejemplo del servidor usa Fastify). :::

Validando solicitudes de webhook con un secreto de consumidor

Cuando creas un secreto, nuestro servicio Chainhooks adjunta un Authorization: Bearer <secret> encabezado a cada intento de webhook, proporcionándote un simple apretón de manos de secreto compartido. Así es como empezar:

  1. Rota el secreto con rotateConsumerSecret (o el /chainhooks/{uuid}/secret API) siempre que necesites inicializar o crear un nuevo token.
  2. Rechazar entregas de webhook cuyas Authorization header no es igual Bearer <current-secret>.

Crear/rotar secreto del consumidor

import { ChainhooksClient, CHAINHOOKS_BASE_URL } from '@hirosystems/chainhooks-client';

const client = new ChainhooksClient({
  baseUrl: CHAINHOOKS_BASE_URL.mainnet, // or .testnet / custom URL
  apiKey: process.env.HIRO_API_KEY!,
});

// Store this value securely and use it to validate webhook requests
const secret = await client.rotateConsumerSecret().secret;

Ejemplo de servidor Fastify

server.post('/webhook', async (request, reply) => {
  if (!secret) {
    reply.code(503).send({ error: 'consumer secret unavailable' });
    return;
  }

  const authHeader = request.headers.authorization;
  if (authHeader !== `Bearer ${secret}`) {
    reply.code(401).send({ error: 'invalid consumer secret' });
    return;
  }

  const event = request.body;
  console.log(`received chainhook ${event.chainhook.uuid}`);
  reply.code(204).send();
});

await server.listen({ port: Number(process.env.PORT) || 3000 });