Аутентификация
Аутентификация в Notarium встроена и реализована целиком на служебной БД — без внешнего IdP, без JWT, без SMTP. Режим выбирается переменной AUTH_MODE и определяет, есть ли вообще логин.
Режим password (по умолчанию)
Безопасно по умолчанию: полноценная многопользовательская аутентификация.
- Первый запуск. На чистом инстансе первый посетитель через setup-экран заводит владельца (администратор + владелец сконфигурированных пространств). Преднастроенного пароля нет; после регистрации setup закрывается навсегда.
- Сессии. Логин создаёт серверную сессию — строку в БД, а не JWT. Она живёт в HttpOnly-cookie
nt_sessionсо скользящим TTL 30 дней и флагомSecureза HTTPS. Отзыв доступа мгновенный: отключение пользователя или смена пароля немедленно рвут живые сессии. - Нужна служебная БД. Она есть по умолчанию — SQLite под
DATA_DIR, задавать ничего не требуется.META_DB_URLтрогают только ради переезда на внешний Postgres. См. База данных.
Режим none
Единственный all-access принципал — оператор включает этот режим осознанно, для десктопа, локальной разработки или доверенного интранета. Auth-маршруты отвечают 404, login-UI не существует, служебная БД для auth не нужна.
none-инстанс в сетьВ режиме none любой, кто достучится до порта, получает полный доступ ко всем данным — включая MCP-эндпоинт агентов. Используйте его только на изолированном или доверенном контуре.
Роли и доступ
Доступ к данным даётся членством в пространстве, роли — три:
| Роль | Права |
|---|---|
reader | Читает всё в пространстве. |
writer | Правит заметки. |
owner | Управляет составом участников. |
Флаг host-admin управляет пользователями и пространствами, но чтобы читать данные конкретного пространства, всё равно нужно членство в нём. Подробнее о модели — Модель доступа.
Инвайты и сброс пароля
SMTP в Notarium нет — первичная выдача учётки — это одноразовая ссылка, которую администратор передаёт вручную. Один механизм, два назначения:
- Инвайт — приглашение пользователя без пароля; ссылка живёт 7 дней.
- Сброс пароля — ссылка живёт 24 часа; принятие завершает старые сессии.
Токен передаётся в URL-фрагменте (/invite#<token>), поэтому не попадает в access-логи. Одновременно у пользователя живёт одна такая ссылка; чужой пароль администратор не знает никогда.
Токены для агентов
ИИ-агенты аутентифицируются персональным access-токеном (PAT) вида Authorization: Bearer ntp_… со scope read или write и опциональным сужением по пространствам. Секрет показывается ровно один раз. Выпуск токенов и другие управляющие действия доступны только под сессией — утёкший PAT не эскалируется. Подробности — Подключить агента и Безопасность и видимость.
Восстановление доступа
Раз reset-ссылку выдаёт только администратор, потеря пароля единственного админа означала бы потерю доступа. Выход — admin-CLI, работающий напрямую по служебной БД. Это одна из встроенных команд образа, поэтому вызывается коротко, прямо в работающий контейнер:
docker compose exec notarium admin create-admin <user> --random
# для голого docker run:
docker exec -it notarium admin create-admin <user> --random
Останавливать сервер не нужно: SQLite в режиме WAL терпит второго писателя, а Postgres — тем более. Служебную БД CLI находит сам, по той же логике, что и сервер (META_DB_URL или корень из DATA_DIR); при неверном пути он завершается ошибкой, а не создаёт молча пустую БД, в которой «нет пользователей».
Доступные команды:
| Команда | Действие |
|---|---|
list | Список пользователей. |
passwd <user> [--password <pw> | --random] | Сменить пароль. |
create-admin <user> [--random] [--display "Имя"] | Создать администратора. |
grant <user> <space> <owner|writer|reader> | Выдать роль в пространстве. |
Пароль без флага читается из stdin с заглушённым эхо, чтобы не попасть в историю команд. setPassword/createAdmin доступны только из CLI — HTTP-пути для них нет: это операторская граница хоста. Остальные команды образа — на странице CLI образа.