mxHeadless
REST API gateway для headless-фронтендов на MODX 3. Ресурсы, объекты, OpenAPI, API keys и OAuth

Bearer-токены mxt_* с коротким TTL. По умолчанию выключено.
| Ключ | По умолчанию | Назначение |
|---|---|---|
mxheadless_oauth_enabled | false | POST /api/v1/auth/token |
mxheadless_oauth_token_ttl | 3600 | TTL access token (секунды) |
mxheadless_oauth_password_grant_enabled | false | Grant password |
php core/components/mxheadless/bin/oauth-client-create.php \
--client-id=next-preview \
--name='Next preview' \
--scopes=resources.read,preview \
--grants=client_credentialsSecret показывают один раз. Таблицы: mxheadless_oauth_clients, mxheadless_oauth_tokens (hash).
curl -s -X POST https://example.com/api/v1/auth/token \
-H 'Content-Type: application/json' \
-d '{
"grant_type": "client_credentials",
"client_id": "next-preview",
"client_secret": "YOUR_CLIENT_SECRET",
"scope": "resources.read"
}'Ответ содержит access_token (mxt_...), token_type, expires_in. Дальше:
curl -s https://example.com/api/v1/resources \
-H "Authorization: Bearer mxt_..."Поддерживаются application/json и application/x-www-form-urlencoded. Для client credentials допускается HTTP Basic с client_id/client_secret.
| Grant | Когда |
|---|---|
client_credentials | Machine-to-machine (default) |
password | Только если mxheadless_oauth_password_grant_enabled=true |
Ошибка OAuth: 400 invalid_grant.
| Credential | Когда |
|---|---|
mxh_* | CI, долгие workers, без refresh |
mxt_* | TTL, ротация без redeploy секрета в каждом сервисе |
Оба типа проходят один scope checker. CSRF не нужен.