Начало работы

Аутентификация

Доступ к API выдаётся парой JWT-токенов: коротким access_token для запросов и refresh_token для его обновления.
СхемаJWT, заголовок Authorization: Bearer <access_token>
ВходGET /auth/login-token
ОбновлениеPOST /auth/refresh
Время жизни access_token1 минута
Время жизни refresh_token30 дней
refresh_tokenОдноразовый: заменяется новым при каждом обновлении

Как это работает

  1. Обратитесь по ссылке входа с параметрами id и token — в ответ придёт пара токенов.
  2. Подставляйте access_token в заголовок Authorization при каждом запросе к /api/*.
  3. Когда access_token истёк, получите новую пару методом /auth/refresh и повторите запрос.

Получение токенов

Точка входа: постоянные id и token обмениваются на пару JWT.

GET
http://192.168.70.253:3102/auth/login-token
Параметр Тип Обязательный Описание
idstring (uuid)даИдентификатор пользователя.
tokenstringдаПостоянный токен пользователя.
curl 'http://192.168.70.253:3102/auth/login-token?id=<id>&token=<token>'
Поле ответа Тип Обязательный Описание
successbooleanдаПризнак успешного ответа. Приходит во всех ответах API рядом с result.
resultTokensдаПолезная нагрузка ответа. Все ответы API обёрнуты в это поле.
200 OK
{
  "success": true,
  "result": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "expires_in": 60
  }
}

Использование токена

Все методы раздела /api требуют заголовок Authorization.

Заголовок Тип Обязательный Описание
AuthorizationstringдаBearer <access_token>. Без него запрос к /api/* вернёт 401.
GET
http://192.168.70.253:3102/api/vin?vin=JTJBERBZ602000192
GET
http://192.168.70.253:3102/api/q?q=702c9916-428a-433d-8eac-2245d9a48834
curl 'http://192.168.70.253:3102/api/vin?vin=JTJBERBZ602000192' \
  -H 'Authorization: Bearer <access_token>'

Обновление токена

Возвращает новую пару токенов в том же формате, что и вход, со статусом 201 Created.

POST
http://192.168.70.253:3102/auth/refresh
Параметр Тип Обязательный Описание
refresh_tokenstring (JWT)даТокен обновления, полученный при входе или при прошлом обновлении.
curl -X POST 'http://192.168.70.253:3102/auth/refresh' \
  -H 'Content-Type: application/json' \
  -d '{ "refresh_token": "<refresh_token>" }'
Поле ответа Тип Обязательный Описание
successbooleanдаПризнак успешного ответа. Приходит во всех ответах API рядом с result.
resultTokensдаПолезная нагрузка ответа. Все ответы API обёрнуты в это поле.
201 Created
{
  "success": true,
  "result": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "expires_in": 60
  }
}
refresh_token одноразовый
После успешного обновления прежний refresh_token перестаёт действовать. Сохраните оба токена из ответа и используйте для следующего обновления новый refresh_token: повторный вызов /auth/refresh со старым токеном вернёт 401.

Ошибки

Тело ответа при отказе приходит без обёртки result.

HTTP Код ошибки Когда возникает
401UnauthorizedЗаголовок Authorization не передан, access_token истёк или повреждён. Нужно обновить пару через /auth/refresh.
401UnauthorizedОтвет /auth/refresh: refresh_token истёк, отозван или уже использован. Нужно пройти вход по ссылке заново.
Поле тела ошибки Тип Обязательный Описание
statusCodenumberдаHTTP-код ответа, дублирует статус.
timestampstringдаМомент отказа в формате ISO 8601.
pathstringдаПуть запроса без базового адреса.
methodstringдаHTTP-метод запроса.
messagestringдаПричина отказа, например Unauthorized.
401 Unauthorized
{
  "statusCode": 401,
  "timestamp": "2026-09-01T11:19:15.591Z",
  "path": "/api/vin",
  "method": "GET",
  "message": "Unauthorized"
}

Дополнительная информация

Ссылка входа — это секрет
Пара id и token постоянна и даёт полный доступ к API. Держите её на сервере: не публикуйте в браузерном коде, мобильных приложениях и репозиториях.
  • Храните пару токенов вместе: без refresh_token придётся заново проходить вход.
  • После каждого обновления заменяйте сохранённую пару целиком: refresh_token одноразовый и приходит новым в каждом ответе.
  • Срок жизни refresh_token — 30 дней с момента выдачи. Если приложение простаивало дольше, обновление вернёт 401 и понадобится повторный вход.
  • Рабочая стратегия: держите токен с меткой expires_in и обновляйте его за несколько секунд до истечения, а на ответ 401 — обновляйте пару и повторяйте запрос один раз.
  • Если /auth/refresh тоже ответил ошибкой, повторите вход по /auth/login-token — постоянные id и token для этого и нужны.