身份认证
Notarium 的身份认证是内置的,完全跑在元数据库之上——不依赖外部 IdP,不用 JWT,也不用 SMTP。模式由 AUTH_MODE 变量选定,它决定了到底有没有登录这一环。
password 模式(默认)
默认即安全:完整的多用户身份认证。
- 首次启动。 在全新实例上,第一位访客通过首次运行的设置界面创建所有者(主机管理员,同时是已配置各空间的所有者)。没有预置密码;该账户一旦注册完成,设置界面便永久关闭。
- 会话。 登录会创建一个服务端会话——数据库里的一行记录,而不是 JWT。它存放在 HttpOnly 的
nt_sessioncookie 中,采用 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)进行认证,带有 read 或 write 作用域,并可选地收窄到特定空间。密钥只会展示一次。签发令牌及其他管理操作仅在会话内可用——泄露的 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页面。