NotariumДокументация
Версия документации: latest
RU

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

Аутентификация в 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 образа.