Авторизация OAuth2 Client Credentials
CloudPrint использует серверный OAuth2 Client Credentials. Секрет хранится только в защищённом хранилище серверной части; браузер, мобильное приложение, скрипт агента и публичный репозиторий не должны его получать.
Создайте API-приложение и выберите разрешения
Создавайте отдельное приложение для каждой внешней системы. Для PDF- и RAW-печати нужны printers:read, documents:write, print_jobs:write, print_jobs:read; agents:read добавляйте только для /api/v1/agents. Секрет показывается один раз.
Получите и кэшируйте токен
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'{
"token_type": "Bearer",
"expires_in": 900,
"access_token": "eyJ..."
}Кэшируйте токен почти на весь 900-секундный срок. Не запрашивайте новый перед каждой печатью.
Проверьте аккаунт и разрешения
curl -sS https://public-api.cloudprint.me/api/v1/me \
-H "Authorization: Bearer $ACCESS_TOKEN"{
"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"
]
}Эта проверка показывает, какой аккаунт, API-приложение и набор разрешений представляет токен, и предотвращает печать в неверном аккаунте.
Обработайте ошибки OAuth и API
400 invalid_scope означает неизвестное или неразрешённое значение scope. 401 invalid_client при получении токена указывает на неверные учётные данные. 401 при обращении к API означает истёкший или неверный Bearer-токен: обновите его один раз и один раз повторите запрос. 403 означает, что действующему токену не хватает разрешения.
Безопасно заменяйте учётные данные
Выпустите замену, разверните её через менеджер секретов и проверьте /api/v1/me до отзыва старого клиента. Не журналируйте секрет и полный токен. X-Request-Id можно сохранять для сопоставления запросов.