
- MODX 3
- PHP 8.1


Ротируйте API keys, секреты OAuth client и webhook по расписанию или после подозрения на утечку.
| Секрет | Хранилище |
|---|---|
| API key | mxheadless_api_keys.secret_hash, password_hash, исходный secret не восстановить |
| OAuth client | mxheadless_oauth_clients.client_secret_hash, password_hash |
| OAuth access token | mxheadless_oauth_tokens.token_hash |
| Webhook subscription | mxheadless_webhook_subscriptions.secret открытым текстом |
Webhook secret в базе читается: он копируется в каждую запись mxheadless_webhook_deliveries.secret и печатается в stdout скриптом bin/webhook-subscribe.php.
mxh_*) Формат: mxh_{lookupId}_{secret}. В базе: lookup_id, secret_hash, scopes и опциональные rate limits.
last_used_on или audit log).revoked = 1).Не отзывайте ключ, пока все caller не перешли.
После revoke Bearer со старым secret вернёт 401. Кэшированные anonymous GET могут жить до mxheadless_cache_ttl. На время ротации снизьте TTL или выключите cache.
При mxheadless_oauth_enabled=true:
POST /api/v1/auth/token.client_id задаётся вами в bin/oauth-client-create.php --client-id= и хранится как есть в колонке client_id varchar(64). Префикса у него нет: mxh_ относится к API key, mxt_ к access-токену.
Access tokens истекают через mxheadless_oauth_token_ttl (default 3600 с). Смена client secret блокирует новые обмены. Уже выданные tokens живут до expiry.
Секрет лежит в mxheadless_webhook_subscriptions.secret открытым текстом и копируется в записи доставок.
MXHEADLESS_WEBHOOK_SECRET).Pending outbox хранит snapshot secret на момент enqueue, поэтому смена секрета не влияет на уже поставленные в очередь доставки: их подпишет старый секрет.
Как ограничить утечку:
webhook-subscribe.php в общий лог, перенаправляйте в файл с правами на пользователя сайта.mxheadless_webhook_subscriptions и mxheadless_webhook_deliveries из копий базы и панелей админки.