Aglet

Triage webhook clock skew signature failures

A valid signed event can fail a freshness check when receiver time is wrong, while a bad signature can look similar. Freeze one rejection and record signed time, receiver time, tolerance label, body metadata, and verifier result. Separate clock skew, stale delivery, wrong secret, and altered body.

Establish what is happening

  1. Capture time evidence

    Record endpoint, environment, signed timestamp, receiver time source, tolerance label, content type, body length, and verification stage. Do not log secrets or full payloads. Note whether signature matched before freshness failed.

  2. Compare time boundaries

    Run recent, boundary-age, stale, seconds-versus-milliseconds, invalid-time, wrong-secret, and altered-body fixtures. Compare clock difference and verifier stage. A timestamp failure should not be recorded as a secret mismatch. Keep timestamp units explicit in the fixture.

  3. Bound affected receivers

    Group failures by endpoint, host, environment, clock source, receiver revision, and delivery age. Separate local clock drift, sender delay, parser unit, and signature input. Quarantine stale or ambiguous deliveries. Preserve endpoint time source for review.

What to carry forward

Triage ends with signed and receiver times, verifier stage, affected receivers, and evidence gap. Keep stale events unprocessed. Route time source, tolerance, raw-body, and secret questions separately. Keep freshness and authenticity as separate findings for review.

Technical background: Coinbase developer documentation.

Keep the decision with the work.

Use a Work Item in Aglet to record the problem, the evidence you have, and the next decision. Add an owner and priority, then keep updates in the discussion so the next person can follow the reasoning.

Create an account See the product workflow