IOSOR База знань

Гейт підпису й вікна replay

Prod-гейт: перевірити підпис і обмежити вікно replay до того, як webhook стане money чи status truth — unsigned/stale лишаються fail-closed.

Непідписаний або протухлий webhook — не status truth і не повинен рухати prepaid money. Покупцю потрібен жорсткий гейт: verify підпису плюс обмежене вікно replay до будь-якого оновлення ledger чи product status. Ця сторінка — саме гейт, не есе про ротацію підпису і не playbook inbound SMS retry.

Пов’язані: підпис webhook і вікно replay, повторні спроби вхідного вебхука, Спільна мова статусів для product і finance, debit і delivery status в одному ledger.

IOSOR — white-label prepaid. USD 20 фінансує пілот гейта на одному consumer; soft review близько USD 1 000/міс робить пропуск verify ризиком forged-status. Клієнт бачить лише white-label reject macros.

Verify підпису — money gate

Money і status truth починаються лише після проходження перевірки підпису. Missing, mismatched або skipped підписи fails closed — немає рядка ledger, немає «delivered все одно для пілота». Catalog Live не скасовує гейт. Глибина звичок: підпис webhook і вікно replay. Soft USD 1 000/міс вважає «приймати unsigned у staging вічно» боргом production; USD 20 доводить: підроблене тіло ніколи не пише debit.

Вікно replay до status truth

Перевірка гейта Pass означає Fail означає
Підпис є + валідний Authenticated event Reject; немає money/status write
Timestamp усередині вікна Достатньо свіжий Reject як replay/stale
Event ID ще не бачили Перший accept ACK без другого debit
Подія в контракті У меню buyer Drop unknown type

At-least-once доставка буде ретраїти. Пізній retry поза вікном — не «maybe delivered». Логуйте відмови вікна окремо від fails підпису. Глибина inbound retry: повторні спроби вхідного вебхука.

Fail closed, коли гейт відхиляє

Відхилені події ніколи не вигадують success. Product і finance ділять одні слова reject — не hero upstream codes: Спільна мова статусів для product і finance. Рядки debit лишаються лише на accepted events: debit і delivery status в одному ledger. Side effects лише після ACK; CRM до гейта — шлях до double truth.

Product, finance і ops ділять одне proof

Product: легітимна signed, in-window подія оновлює status рівно раз? Finance: кожна money-affecting event показує gate pass у тому ж UTC-вікні? Ops: вивантаження signature fails vs window rejects без Slack-археології? Soft volume language blocked, доки duplicate-in-window smoke не покаже один рядок ledger.

Чекліст покупця щодо гейта підпису й replay

  1. Signature middleware на кожному production consumer до платного трафіку?
  2. Вікно replay назване, логується й обмежене — не «тижні»?
  3. Gate reject ніколи не пише money чи success status?
  4. Дублікат in-window event ID → один кінцевий стан, без другого debit?
  5. Signature fail і window reject рахуються окремо для ops?
  6. Розмова soft USD 1 000/міс blocked, поки гейт вимкнено?

Будь-яке «ні» тримає гейт — і довірену webhook truth — у draft.

Почніть з IOSOR

Налаштуйте шлюз перевірки підпису та обмежте вікно повтору (replay window) у консолі IOSOR перед запуском робочого трафіку. Перевірте, що будь-яка подія з недійсним підписом або застарілим часовим штампом закривається помилкою без зміни стану чи списання коштів. Переконайтеся, що обробник вебхуків повертає єдиний зрозумілий код відхилення для продуктів і фінансів.

Підсумок IOSOR

Ця стаття доводить, що перевірка підпису та жорстке вікно повтору є основними рубежами безпеки для фінансового та статусного обліку.

Чи був матеріал корисним?

Пов’язані гіди