ReOTP.
보안 및 동기화/웹훅(Webhooks) 및 HMAC
1 분 분량

웹훅(Webhooks) 및 HMAC

전화번호 검증 시 실시간 안전한 알림 수신 방법을 알아보세요.

Webhooks는 지속적 상태 확인(SSE) 없이도 사용자 인증 성공을 즉시 알리는 가장 빠르고 안전한 방법입니다.

사용자가 메시지를 보낼 때 성공적으로 일치하면, 시스템은 사전에 프로젝트 설정에서 지정한 URL로 POST 요청을 보냅니다.

웹훅 보안(HMAC 서명)

서버가 진짜 ReOTP 서버에서 온 요청임을 확인하기 위해, 모든 요청은 HMAC-SHA256 알고리즘으로 서명됩니다.

1. 프로젝트 설정에서 Webhook Secret을 생성하세요.

2. 서명된 헤더 x-webhook-signature가 요청에 포함됩니다.

3. 서버에서 동일한 Secret과 함께 서명을 계산하여 비교해야 합니다.

연동 코드 (SDK)
const express = require('express');
const crypto = require('crypto');
const app = express();

const WEBHOOK_SECRET = 'your_webhook_secret_here';

// Must parse raw body to verify signature correctly
app.use(express.json());

app.post('/webhook/reotp', (req, res) => {
  const signatureHeader = req.headers['x-webhook-signature'];
  const payloadString = JSON.stringify(req.body);

  // Calculate HMAC SHA256
  const expectedSignature = crypto
    .createHmac('sha256', WEBHOOK_SECRET)
    .update(payloadString)
    .digest('hex');

  // Securely compare signatures
  if (signatureHeader !== expectedSignature) {
    return res.status(401).send('Invalid signature');
  }

  // Handle successful verification
  const { event, phoneNumber, requestId } = req.body;
  if (event === 'verification.success') {
    console.log(`User ${phoneNumber} verified! (ID: ${requestId})`);
    // Login user, create session, update DB, etc.
  }

  // Must return 200 OK so we know it was delivered
  res.status(200).send('OK');
});

app.listen(3000, () => console.log('Listening for Webhooks...'));