GH GambleHub

Автентифікація API: OAuth2, JWT, HMAC

TL; DR

OAuth2/OIDC + JWT - стандарт для клієнтських додатків і серверних інтеграцій зі складною авторизацією (scopes/roles/tenants), SSO і короткими TTL токенів.
HMAC-підписи - кращий вибір для вебхуків і простих партнерських викликів «server→server» з детермінованою перевіркою і жорстким захистом від replay.
Посилюйте безпеку: mTLS або DPoP (sender-constrained tokens), короткі TTL (5-15 хв), ротація ключів (JWKS), refresh-токени з ротацією/anti-reuse, сувора валідація'aud/iss/exp/nbf/kid'і policy-as-code на gateway.

1) Карта рішень: що де застосовувати

СценарійРекомендуємо
Зовнішні клієнти (Web/iOS/Android), SSOOAuth2/OIDC: Authorization Code + PKCE
Server↔server (машинні інтеграції)OAuth2 Client Credentials (mTLS/DPoP по можливості)
Партнерські виклики з фіксованими маршрутамиOAuth2 або HMAC (якщо scopes прості)
Вебхукі (PSP/антифрод/платежі)HMAC підпис + таймштамп + ідемпотентність
Внутрішній схід-захід трафікmTLS + короткі JWT (або opaque + introspection)
Дуже чутливі операції (платежі)OAuth2 + mTLS/DPoP, по можливості step-up (SCA/3DS)

2) OAuth2/OIDC: потоки та клієнти

2. 1 Потоки

Authorization Code + PKCE (Web/Mobile): захищає код авторизації від перехоплення.
Client Credentials: server↔server без користувача; scopes - мінімально необхідні.
Device Code: для пристроїв без браузера.
Refresh Token: тільки для довірених клієнтів; ротуйте і вмикайте reuse detection.

2. 2 Клієнтські типи

Confidential (сервери, BFF): зберігають секрети; використовуйте mTLS.
Public (SPA/mobile): секрет зберігати не можна → PKCE, DPoP, короткі TTL і обмежені scopes.

3) JWT: структура, терміни, верифікація

3. 1 Поля (claims)

Обов'язкові: 'iss','sub','aud','exp','iat','nbf','jti','scope '/' permissions','tenant'( якщо мультиаренда),'kid'.

3. 2 Терміни життя

Access token: 5-15 хвилин.
Refresh token: дні/тижні, ротуємо при кожному обміні; при повторній подачі старого - блокуємо сесію.
Clock skew: допуск ≤ 60 сек.

3. 3 JWKS і ключі

Зберігання ключів в KMS/Vault,'kid'обов'язковий.
Два активних ключа (rolling), перевипуск раз в 60-90 днів або при інциденті.
Кеш JWKS на gateway ≤ 5 хвилин, з авто-інвалідацією.

3. 4 Верифікація на gateway/сервісах

Звіряйте: підпис,'aud'( допущені сервіси),'iss','exp/nbf', список блокувань (revocation).
Не довіряйте полям з тіла без перевірки підпису; ігноруйте'alg = none'.

Приклад заголовка запиту:

Authorization: Bearer <JWT>
X-Trace-Id: <uuid>

4) Прив'язка токена до клієнта: mTLS, DPoP

mTLS (TLS клієнтські сертифікати): токен видається і валідується тільки при наявності клієнтського сертифіката → токен марний поза зв'язкою «ключ + сертифікат».
DPoP (Demonstration of Proof-of-Possession): клієнт підписує кожен запит одноразовим ключем → захист від replay і крадіжки токена в публічних клієнтах.
Для критичних маршрутів (платіжні мутації) - вимагати один з механізмів.

5) Авторизація: scopes, roles, ABAC

Scopes - мінімальні дії ('payments:write`, `payouts:status:read`).
Roles - агрегати для адмінок; не використовуйте їх безпосередньо без scopes.
ABAC - атрибути в токені ('tenant','country','kyc _ level','risk _ flags') → політики на gateway/OPA.
Політика на рівні маршруту/поля (GraphQL) і на рівні доменної операції (REST/gRPC).

6) HMAC-підписи: вебхуки та партнери

6. 1 Концепт

У кожної інтеграції - власний секрет.

Підпис над канонічним рядком: `timestamp + "\n" + method + "\n" + path + "\n" + sha256(body)`

Заголовки:

X-Signature: v1=base64(hmac_sha256(secret, canonical_string))
X-Timestamp: 2025-11-03T12:34:56Z
X-Event-Id: 01HF...

Вікно часу: ≤ 300 сек; запити з простроченим/майбутнім'X-Timestamp'відхиляти.
Ідемпотентність: зберігайте'X-Event-Id'на TTL (24 год) - відкидайте дублікати.

6. 2 Кращі практики

Секрети в KMS/Vault, ротація кожні 90 днів.
Для публічних клієнтів HMAC не підходить (секрет витікає); Використовуйте OAuth2/DPoP.

7) Захист від replay, brute force і витоків

Nonce/' jti'для чутливих операцій; чорний список використаних ідентифікаторів.
Rate/quotas: за ключем/клієнтом/тенантом/маршрутом; «дорогі» операції - окремі квоти.
IP/ASN/Geo allow-lists для партнерів і вебхуків.
Content-type allow ('application/json'), ліміт розміру тіла.
Маскування PII в логах; заборона логувати токени/секрети.

8) Помилки та відповіді (єдиний формат)

Структура помилки:
json
{
"error": "invalid_token",
"error_description": "expired",
"trace_id": "4e3f-..."
}
Статуси:
  • «401» - ні/невалідний токен (WWW-Authenticate).
  • «403» - недостатньо прав (scope/ABAC).
  • '429'- ліміти/квоти.
  • gRPC: `UNAUTHENTICATED`/`PERMISSION_DENIED`/`RESOURCE_EXHAUSTED`.

9) Політики термінів і сесій

Access ≤ 15 хв; Refresh - ротація + reuse detection (подали старий - відгук сесії).
Вебхукі HMAC: TTL підписи ≤ 5 хв; повторна доставка з експоненціальним backoff.
Відгук сесії/ключа → негайне потрапляння в revocation list (кеш на gateway ≤ 1 хв).

10) Спостережуваність і аудит

Кореляція по'trace _ id '/' span _ id'.
Метрики: auth success rate,'401/403/429', латентність OIDC/JWKS, частота ротацій, reuse refresh, частка DPoP/mTLS трафіку.
Аудит-лог: «хто, коли, з яким'sub/tenant/scope'викликав що», зміни ключів/секретів, провалені підписи HMAC.

11) Вбудовування в API Gateway

JWT-валідація (JWKS кеш) і OPA/ABAC на шлюзі.
mTLS профілі для довірених клієнтів/партнерів.
HMAC-верифікація вебхуків на edge (до внутрішніх сервісів).
Rate/Quota поліси, circuit-breaker на OIDC-провайдера (кешувати JWK).
Feature-flags: швидке відключення клієнта/ключа, зміна алгоритму підпису.

12) Міні-сніпети

Псевдо: верифікація JWT

pseudo jwks = cache. getOrFetch(iss + "/.well-known/jwks. json")
key = jwks[kid]
assert verify_signature(jwt, key)
assert aud in ALLOWED_AUDIENCES and iss in TRUSTED_ISSUERS assert now in [nbf-60s, exp+60s]

Псевдо: перевірка HMAC вебхука

pseudo canonical = timestamp + "\n" + method + "\n" + path + "\n" + sha256(body)
sig = base64(hmac_sha256(secret, canonical))
assert abs(now - timestamp) <= 300 assert not seen(event_id)
assert timingSafeEqual(sig, header["X-Signature"].split("v1=")[1])
markSeen(event_id, ttl=86400)

Приклад scope-політики (OPA/Rego ідея)

rego allow {
input. jwt. scope[_] == "payments:write"
input. jwt. tenant == input. route. tenant
}

13) Плейбуки інцидентів

Витік приватного ключа/JWT-підписувача: перевипуск ключів, оновлення JWKS, негайне відключення старого ('kid'→ deny), інвалідація refresh, примусовий logout.
Підміна вебхуків: ротація секретів, IP allow-list, посилення вікна'X-Timestamp', повторна доставка пропущених подій.
Replay/брутфорс: включити DPoP/mTLS на критичних маршрутах, звуження квот, тимчасові блоки по IP/ASN, включити'jti'-блокліст.
Outage OIDC: деградація кешованих токенів (grace), circuit-breaker провайдера, повідомлення клієнтів.

14) Чек-листи впровадження

Автентифікація (мінімум):
  • OAuth2: Code+PKCE (Web/Mobile), Client Credentials (server-to-server)
  • TTL: Access ≤ 15 хв, Refresh з ротацією і reuse detection
  • JWKS: два активних ключа, «kid», кеш ≤ 5 хв
  • Вебхукі: HMAC v1,'X-Timestamp','X-Event-Id', вікно ≤ 300 сек, ідемпотентність
  • Sender-constrained: mTLS/DPoP на критичних маршрутах
  • ABAC/OPA: scopes + tenant/risk в політиках шлюзу
  • Rate/Quota и 429; IP/ASN allow-lists для партнерів
  • Аудит та алерти (401/403/429, reuse refresh, підписи HMAC)
Приватність/логування:
  • Не логувати токени/секрети/повні тіла карт
  • Маскування PII; DSAR підтримка; термін зберігання логів обмежений

15) Анти-патерни

'alg = none'або довіра токену без перевірки підпису/JWKS.
Довгоживучі access-токени (годинник/доба).
Один загальний HMAC-секрет на всіх партнерів.
Вебхукі без таймштампу/ідемпотентності.
Refresh-токени без ротації і без reuse detection.
Відсутність'aud '/' iss'-валідації і'kid'-ротації.
Зберігання секретів у змінних оточення без KMS/Vault.

16) НФТ/SLO (орієнтири)

OIDC/JWKS доступність ≥ 99. 95% (edge-кеш знижує залежність).
JWT валідація добавка на gateway ≤ 2-5 мс p95.
Помилки автентифікації («401») ≤ 0. 5% від загального трафіку (без урахування ботів).
Підписані вебхуки: частка успішно верифікованих ≥ 99. 9%, середня затримка доставки ≤ 3 с.

Резюме

Комбінуйте механізми: OAuth2/OIDC + JWT для користувачів і багатих серверних сценаріїв, HMAC для вебхуків/простих партнерів, а для критичних операцій - mTLS/DPoP. Тримайте короткі TTL, ротації ключів (JWKS), суворі політики ABAC/OPA, захищайте контури від replay і витоків, і автоматизуйте все на рівні API Gateway. Так автентифікація стане передбачуваною, масштабованою і безпечною - без компромісів для UX і монетизації.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.