# ✨ Пускать скрипты в API по личным токенам - **Тип:** feature - **Категория:** Очередь - **Зачем:** Вход через OIDC закрывает API целиком, а скрипту браузерная сессия недоступна: автоматизировать загрузку станет нечем. - **Теги:** goal:multi-user Двигает пункты 1 и 6 «Завершения» цели: запрос без токена не проходит (пункт 1), а скрипт ходит в API по токену, выпущенному пользователем, и видит ровно его записи (пункт 6). Токен принадлежит учётной записи и даёт ровно её права: записи, заведённые по токену, видны владельцу в приложении, и наоборот. ## Затрагивает - заголовок авторизации у всех эндпоинтов `/api/`; - таблица токенов: владелец, имя, отпечаток, время выпуска и последнего обращения, и её миграция; - эндпоинты выпуска, перечня и отзыва токена; - экран настроек — место, где токен выпускают и отзывают; - `docs/security.md` — второй способ представиться и хранение отпечатка; - `README.md` — пример вызова API скриптом. ## Критерии приёмки - Запрос с годным токеном заводит задачу от имени его владельца. Оракул — тест API: задача в репозитории с владельцем токена. - Запрос без токена и с отозванным токеном получает `401` и задачи не заводит. Оракул — тест на трёх случаях: нет заголовка, чужая строка, отозванный токен. - Полное значение токена показывается один раз при выпуске, в базе лежит только отпечаток. Оракул — тест: повторное чтение токена отдаёт имя и отпечаток, значение отсутствует, плюс поиск значения по логу пуст. - Токен не попадает ни в журнал, ни в текст ошибки. Оракул — тест приёма с токеном: в перехваченном журнале значения нет. ## Рамки Учётные записи по-прежнему заводит Authelia — свою регистрацию не делаем. Сроков жизни и областей действия у токена не заводим: он даёт права владельца целиком. Берётся после `oidc-login`: до неё представляться некому.