Files
transcriber/tasks/items/api-tokens.md
T
av e4441f3c49 tasks: вход переезжает на заголовки прокси, пять задач про OIDC закрыты
- заведена `trusted-header-login` и поставлена в голову очереди
- пять задач про механику OIDC закрыты как отменённые ею
- `dev-run-task` и `api-tokens` переписаны под новый вход
2026-08-22 17:43:18 +03:00

4.2 KiB

Пускать скрипты в API по личным токенам

  • Тип: feature
  • Категория: Очередь — Второй способ представиться ставится на готовые владельца и контракт, иначе форма ошибки переписывается дважды.
  • Зачем: Скрипту недоступны ни браузерная сессия, ни вход у Authelia: домен целиком стоит за прокси, и автоматизировать загрузку нечем.

Запрос без токена не проходит, а скрипт ходит в API по токену, выпущенному пользователем, и видит ровно его записи.

Половина работы при этом лежит на контуре: домен целиком стоит за forward_auth Authelia, и запрос скрипта не доходит до сервиса вовсе — его отбивает прокси. Значит адресам API нужно правило, пропускающее их к сервису, а сервис судит токен сам. Правило живёт в pet-project-server, вне этого репозитория.

Токен принадлежит учётной записи и даёт ровно её права: записи, заведённые по токену, видны владельцу в приложении, и наоборот.

Затрагивает

  • заголовок авторизации у всех адресов приложения /app/ и его отношение к заголовку, который ставит прокси: два способа представиться и один владелец;
  • правило Authelia, пропускающее адреса API мимо входа, — в pet-project-server;
  • таблица токенов: владелец, имя, отпечаток, время выпуска и последнего обращения, и её миграция;
  • адреса выпуска, перечня и отзыва токена — /app/me/tokens;
  • docs/security.md — второй способ представиться и хранение отпечатка;
  • README.md — пример вызова API скриптом.

Критерии приёмки

  • Запрос с годным токеном заводит задачу от имени его владельца. Оракул — тест API: задача в репозитории с владельцем токена.
  • Запрос без токена и с отозванным токеном получает 401 и задачи не заводит. Оракул — тест на трёх случаях: нет заголовка, чужая строка, отозванный токен.
  • Полное значение токена показывается один раз при выпуске, в базе лежит только отпечаток. Оракул — тест: повторное чтение токена отдаёт имя и отпечаток, значение отсутствует, плюс поиск значения по логу пуст.
  • Токен не попадает ни в журнал, ни в текст ошибки. Оракул — тест приёма с токеном: в перехваченном журнале значения нет.

Рамки

Учётные записи по-прежнему заводит Authelia — свою регистрацию не делаем. Сроков жизни и областей действия у токена не заводим: он даёт права владельца целиком. Берётся после trusted-header-login: до неё представляться некому, а она же решает, какому источнику сервис верит. Экрана выпуска здесь нет — приложения ещё не существует, токен выпускается запросом к API; место токена на экране настроек заводит settings-screen.