Notarium文档
文档版本: latest

身份认证

Notarium 的身份认证是内置的,完全跑在元数据库之上——不依赖外部 IdP,不用 JWT,也不用 SMTP。模式由 AUTH_MODE 变量选定,它决定了到底有没有登录这一环。

password 模式(默认)

默认即安全:完整的多用户身份认证。

  • 首次启动。 在全新实例上,第一位访客通过首次运行的设置界面创建所有者(主机管理员,同时是已配置各空间的所有者)。没有预置密码;该账户一旦注册完成,设置界面便永久关闭。
  • 会话。 登录会创建一个服务端会话——数据库里的一行记录,而不是 JWT。它存放在 HttpOnly 的 nt_session cookie 中,采用 30 天的滑动 TTL,在 HTTPS 下会带上 Secure 标志。吊销即时生效:禁用某用户或修改密码会立即中断其活跃会话。
  • 需要一个元数据库。 它默认就在——DATA_DIR 下的 SQLite,无需任何配置。只有当你要迁移到外部 Postgres 时才会去动 META_DB_URL。参见数据库

none 模式

单一的全权限主体——运维者会有意开启此模式,用于桌面端、本地开发或受信内网。认证路由返回 404,不存在登录 UI,认证也不需要元数据库。

不要把 none 实例暴露到网络

none 模式下,任何能访问到端口的人都将获得对全部数据的完整访问权——包括智能体的 MCP 端点。请仅在隔离或受信的网络中使用它。

角色与访问

对数据的访问由空间成员资格授予,共有三种角色:

角色权限
reader读取空间内的一切。
writer编辑笔记。
owner管理成员资格。

主机管理员标志赋予对用户和空间的管控权,但要读取某个具体空间的数据,仍然需要在其中拥有成员资格。关于该模型的更多内容——见访问模型

邀请与密码重置

Notarium 没有 SMTP——账户的初次交接靠的是一条由管理员亲手转交的一次性链接。一套机制,两种用途:

  • 邀请——添加一个无密码的用户;链接有效期 7 天。
  • 密码重置——链接有效期 24 小时;一经接受即终止旧会话。

令牌承载于 URL 片段中(/invite#<token>),因此绝不会落入访问日志。同一用户同一时刻只有一条这样的有效链接,而管理员也永远不会知道别人的密码。

面向智能体的令牌

AI 智能体使用形如 Authorization: Bearer ntp_… 的个人访问令牌(PAT)进行认证,带有 readwrite 作用域,并可选地收窄到特定空间。密钥只会展示一次。签发令牌及其他管理操作仅在会话内可用——泄露的 PAT 无法提权。详情——见连接智能体安全与可见性

恢复访问

既然重置链接只能由管理员签发,那么弄丢唯一管理员的密码就意味着失去访问权。出路是直接对元数据库操作的 admin CLI。它是镜像内置命令之一,所以调用很短,直接送进正在运行的容器:

docker compose exec notarium admin create-admin <user> --random

# 裸 docker run 的情况:
docker exec -it notarium admin create-admin <user> --random

不必停服:WAL 模式下的 SQLite 容得下第二个写入者,Postgres 就更不在话下。元数据库由 CLI 自行定位,逻辑与服务端一致(META_DB_URL,或由 DATA_DIR 推导出的根目录);路径不对时它会直接报错退出,而不是悄悄建出一个「没有用户」的空库。

可用命令:

命令作用
list列出用户。
passwd <user> [--password <pw> | --random]修改密码。
create-admin <user> [--random] [--display "Name"]创建管理员。
grant <user> <space> <owner|writer|reader>在某空间中授予角色。

不带标志时,密码会从 stdin 读取并关闭回显,因此不会进入命令历史。setPassword/createAdmin 只能从 CLI 调用——它们没有 HTTP 路径:这是主机的运维者边界。镜像的其余命令见镜像 CLI页面。