Webhook sinadura-egiaztapena
vitalera-ren osasun APIko webhook eskaera bakoitzak sinadura kriptografiko bat biltzen du, karga benetakoa dela eta ez dela manipulatua egiaztatzeko. Hau funtsezkoa da urruneko pazienteen monitorizazio integrazioetarako, non webhook kargek datu kliniko sentikorrak daramatzaten, hala nola pazienteen bizi-konstanteak, alarma-aktibatzaileak eta adostasun-aldaketak.
Nola funtzionatzen du
- Webhook amaiera-puntu bat konfiguratzen duzunean, gako sekretu bat ezartzen duzu zure erakundearen ezarpenetan.
- vitalera-k eskaeraren gorputz gordinaren HMAC-SHA256 sinadura kalkulatzen du zure gako sekretuarekin.
- Sinadura
x-webhook-humanai-signatureHTTP goiburuan sartzen da. - Zure aplikazioak sinadura birkalkulatzen du eta goiburuaren balioarekin konparatzen du.
Egiaztapen-urratsak
- Atera
x-webhook-humanai-signaturegoiburua sarrerako eskaeratik. - Irakurri eskaeraren gorputz gordina byte gisa (JSON analisiaren aurretik).
- Kalkulatu gorputz gordinaren HMAC-SHA256 laburpena zure webhook sekretuarekin.
- Konparatu kalkulatutako sinadura goiburuaren balioarekin denbora-konstanteko konparazio funtzio bat erabiliz denbora-erasoak saihesteko.
- Sinadurak bat badatoz, karga benetakoa da. Bestela, baztertu eskaera.
Kode-adibideak
Python
import hmac
import hashlib
def verify_webhook(request_body: bytes, signature_header: str, secret: str) -> bool:
"""Verify the authenticity of a vitalera webhook payload."""
expected_signature = hmac.new(
key=secret.encode("utf-8"),
msg=request_body,
digestmod=hashlib.sha256,
).hexdigest()
return hmac.compare_digest(expected_signature, signature_header)
# Usage in a Flask endpoint
from flask import Flask, request, abort
app = Flask(__name__)
WEBHOOK_SECRET = "your-webhook-secret"
@app.route("/webhooks/vitalera", methods=["POST"])
def handle_webhook():
signature = request.headers.get("x-webhook-humanai-signature", "")
if not verify_webhook(request.data, signature, WEBHOOK_SECRET):
abort(401, "Invalid signature")
payload = request.get_json()
event_type = payload["event_type"]
# Process the event
print(f"Received event: {event_type}")
return "", 200
Node.js
const crypto = require('crypto');
function verifyWebhook(rawBody, signatureHeader, secret) {
const expectedSignature = crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
return crypto.timingSafeEqual(Buffer.from(expectedSignature), Buffer.from(signatureHeader));
}
// Usage in an Express endpoint
const express = require('express');
const app = express();
const WEBHOOK_SECRET = 'your-webhook-secret';
app.post('/webhooks/vitalera', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.headers['x-webhook-humanai-signature'] || '';
if (!verifyWebhook(req.body, signature, WEBHOOK_SECRET)) {
return res.status(401).send('Invalid signature');
}
const payload = JSON.parse(req.body);
console.log(`Received event: ${payload.event_type}`);
res.sendStatus(200);
});
app.listen(3000);
Segurtasun-jardunbide onak
- Beti egiaztatu sinadurak webhook datuak prozesatu aurretik. Inoiz ez fidatu egiaztatu gabeko kargetatik.
- Erabili denbora-konstanteko konparazioa (
hmac.compare_digestPython-en,crypto.timingSafeEqualNode.js-en) denbora-erasoak saihesteko. - Irakurri gorputz gordina JSON analisiaren aurretik. JSON analisi eta birseriatzeak zuriuneak edo gakoen ordena alda ditzakete, sinadura baliogabetuz.
- Erabili HTTPS amaiera-puntuak webhook kargak garraioan babesteko.
- Biratu sekretuak aldizka eta eguneratu zure webhook konfigurazioa egiten duzunean.
- Baztertu berrerreproduzitutako eskaerak kargako
timestamperemua egiaztatuz eta arrazoizko leiho bat baino zaharragoak diren gertaerak baztertuz (adib., 5 minutu).
Arazoak konpontzea
| Arazoa | Konponbidea |
|---|---|
| Sinadura ez dator bat | Ziurtatu eskaeraren gorputzaren byte gordinak hasheatzen ari zarela, ez analisi/birseriatu ondoko bertsio bat. |
| Sinadura-goiburu hutsa | Egiaztatu zure webhook konfiguraziorak gako sekretua biltzen duela. |
| Tartekako egiaztapen-hutsegiteak | Ziurtatu zure web framework-ak ez duela eskaeraren gorputza aldatzen zuk irakurri aurretik. |
Hurrengo urratsak
- Webhook-en ikuspegi orokorra -- Webhook-ak nola funtzionatzen duten eta nola konfiguratu
- Gertaera motak -- Ikusi eskuragarri dauden webhook gertaera guztiak