Перейти к содержанию

Авторизация OAuth2 Client Credentials

CloudPrint использует серверный OAuth2 Client Credentials. Секрет хранится только в backend secret store; браузер, мобильное приложение, скрипт агента и публичный репозиторий не должны его получать.

Создайте client app и scope

Создавайте отдельное приложение для каждой внешней системы и окружения. Стандартной печати нужны printers:read, documents:write, print_jobs:write, print_jobs:read; agents:read нужен только для /api/v1/agents. Секрет показывается один раз.

Получите и кэшируйте токен

bash
curl -sS https://public-api.cloudprint.me/oauth/token \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'grant_type=client_credentials' \
  --data-urlencode 'client_id=YOUR_CLIENT_ID' \
  --data-urlencode 'client_secret=YOUR_CLIENT_SECRET' \
  --data-urlencode 'scope=printers:read documents:write print_jobs:write print_jobs:read'
json
{
  "token_type": "Bearer",
  "expires_in": 900,
  "access_token": "eyJ..."
}

Кэшируйте токен почти на весь 900-секундный срок. Не запрашивайте новый перед каждой печатью.

Проверьте аккаунт и scope

bash
curl -sS https://public-api.cloudprint.me/api/v1/me \
  -H "Authorization: Bearer $ACCESS_TOKEN"
json
{
  "account_id": "44444444-4444-4444-8444-444444444444",
  "account_name": "Acme Print Ops",
  "client_app_id": "33333333-3333-4333-8333-333333333333",
  "client_app_name": "Warehouse integration",
  "scopes": [
    "printers:read",
    "documents:write",
    "print_jobs:write",
    "print_jobs:read"
  ]
}

Этот setup-check показывает, какой аккаунт, client app и набор scope представляет токен, и предотвращает печать в неверном аккаунте.

Обработайте ошибки OAuth и API

400 invalid_scope означает неизвестный или неразрешённый scope. 401 invalid_client на token endpoint — неверные credentials. 401 на API — истёкший/неверный Bearer token: обновите один раз и один раз повторите запрос. 403 означает недостаточный scope действующего токена.

Ротируйте безопасно

Выпустите замену, разверните через secret manager и проверьте /api/v1/me до отзыва старого клиента. Не логируйте secret и полный token. X-Request-Id можно сохранять для корреляции.

Чек-лист перед запуском

  • Используйте исходящее подключение агента и не открывайте порты принтера в интернет.
  • Сохраняйте стабильный идентификатор принтера, а не только отображаемое имя.
  • Проверяйте формат документа, размер страницы и ориентацию до создания задания.
  • Явно задайте обработку конечных статусов, повторов и защиту от двойной печати.

Следующие шаги

Руководства по интеграции CloudPrint, подключению локального агента и эксплуатации печати.