Zum Inhalt
HALOWERK

Sicherwerk

webhook signature

Providers each build their signing string differently — some sign only the body, others prepend a timestamp, an id, or a version marker in a fixed order — and getting that order wrong produces a mismatch that looks exactly like an attack. This checks the signature the way the named provider actually specifies, with constant-time comparison, and returns the string that was signed so a mismatch can be debugged instead of guessed at.

POST https://sicher.halowerk.com/v1/webhook-signature

Eingaben

Felder des veröffentlichten Eingabeschemas
FeldTypPflichtBeschreibung
providerstringJaWhich provider signed the request.
bodystringJaThe raw request body exactly as received, not re-serialised.
secretstringJaThe signing secret.
signaturestringNeinThe signature header value. Required unless headers is given.
headersobjectNeinAll request headers; the right one is picked by provider.
timestampstringNeinTimestamp, if the provider signs one and it is not in the headers.
message_idstringNeinMessage id for schemes that sign one, e.g. Svix.
tolerance_secondsintegerNeinHow old a signed timestamp may be.
Vollständiges Eingabeschema anzeigen
{
  "type": "object",
  "required": [
    "provider",
    "body",
    "secret"
  ],
  "additionalProperties": false,
  "properties": {
    "provider": {
      "type": "string",
      "enum": [
        "github",
        "stripe",
        "shopify",
        "slack",
        "svix",
        "generic_hmac"
      ],
      "description": "Which provider signed the request."
    },
    "body": {
      "type": "string",
      "maxLength": 200000,
      "description": "The raw request body exactly as received, not re-serialised."
    },
    "secret": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000,
      "description": "The signing secret."
    },
    "signature": {
      "type": "string",
      "maxLength": 2000,
      "description": "The signature header value. Required unless headers is given."
    },
    "headers": {
      "type": "object",
      "description": "All request headers; the right one is picked by provider."
    },
    "timestamp": {
      "type": "string",
      "maxLength": 40,
      "description": "Timestamp, if the provider signs one and it is not in the headers."
    },
    "message_id": {
      "type": "string",
      "maxLength": 200,
      "description": "Message id for schemes that sign one, e.g. Svix."
    },
    "tolerance_seconds": {
      "type": "integer",
      "minimum": 1,
      "maximum": 86400,
      "default": 300,
      "description": "How old a signed timestamp may be."
    }
  }
}

Originalschema öffnen

Veröffentlichtes Eingabebeispiel

{
  "provider": "github",
  "body": "{\"synthetic\":true,\"event\":\"documentation-example\"}",
  "secret": "HALOWERK-public-synthetic-example-never-use-for-authentication",
  "signature": "sha256=fdfaa7380ce9e369a7d90e8651603bb777a4f008dd3070b056d2b59122d602f8"
}

Ergebnis & Dokumentation

Veröffentlichtes Ergebnisschema anzeigen
{
  "$ref": "https://sicher.halowerk.com/v1/webhook-signature/schema#/outputSchema"
}

Veröffentlichtes Ergebnisbeispiel öffnen

Maschinenlesbare Dokumentation dieses Hubs

Quelle dieser Seite: der veröffentlichte HALOWERK-Katalog. Stand: 2026-11-01, 15:19 UTC.

Weitere Endpunkte dieses Hubs

Alle Endpunkte dieses Hubs →