---
title: "認証"
description: "password モードと none モード、サーバーサイドセッション、招待とリセット、CLI による管理者アクセスの復旧。"
---

# 認証

Notarium の認証は組み込みで、すべてメタデータデータベース上で完結します。外部 IdP も JWT も SMTP も使いません。モードは `AUTH_MODE` 変数で選び、そもそもログインを設けるかどうかもこれで決まります。

## `password` モード(デフォルト)

デフォルトで安全 — 本格的なマルチユーザー認証です。

- **初回起動。** まっさらなインスタンスでは、最初の訪問者が初回セットアップ画面からオーナーを作成します(ホスト管理者であり、かつ設定済みスペースのオーナー)。あらかじめ用意されたパスワードはありません。このアカウントを登録した時点で、セットアップは二度と開きません。
- **セッション。** ログインすると **サーバーサイドセッション** が作られます。JWT ではなく、データベース上の 1 行です。これは HttpOnly の `nt_session` クッキーに載り、スライディング方式で TTL 30 日、HTTPS の背後では `Secure` フラグが付きます。アクセスの取り消しは即時です。ユーザーの無効化やパスワード変更は、生きているセッションをその場で切断します。
- **メタデータデータベースが必要です。** デフォルトで用意されています — `DATA_DIR` 配下の SQLite で、設定は不要です。`META_DB_URL` に触れるのは外部 Postgres へ移行するときだけです。[データベース](/docs/self-hosting/database/) を参照してください。

## `none` モード

すべてにアクセスできる単一のプリンシパル。オペレーターがこのモードを意図的に有効化するのは、デスクトップ、ローカル開発、あるいは信頼済みのイントラネットのためです。認証ルートは `404` を返し、ログイン UI は存在せず、認証用のメタデータデータベースも不要です。

> [!danger] `none` インスタンスをネットワークに公開しないでください
> `none` モードでは、ポートに到達できる者は誰でもすべてのデータに完全アクセスできます — エージェント向けの MCP エンドポイントも含めてです。隔離された、または信頼できるネットワークでのみ使用してください。

## ロールとアクセス

データへのアクセスはスペースのメンバーシップによって付与され、ロールは 3 つあります。

| ロール | 権限 |
|---|---|
| `reader` | スペース内のすべてを読む。 |
| `writer` | ノートを編集する。 |
| `owner` | メンバーシップを管理する。 |

**ホスト管理者** フラグはユーザーとスペースの制御権を付与しますが、特定スペースの **データを読む** にはそのスペースのメンバーシップが依然として必要です。モデルの詳細は [アクセスモデル](/docs/concepts/access-model/) を参照してください。

## 招待とパスワードリセット

Notarium に SMTP はありません — アカウントの最初の受け渡しは、管理者が手渡しで伝える **ワンタイムリンク** です。仕組みは 1 つ、用途は 2 つ。

- **招待** — パスワードなしでユーザーを追加します。リンクの有効期間は 7 日です。
- **パスワードリセット** — リンクの有効期間は 24 時間です。リセットを完了すると古いセッションは終了します。

トークンは URL フラグメント(`/invite#<token>`)に載るため、アクセスログには決して残りません。ユーザーが同時に持てるこの種のリンクは 1 つだけで、他人のパスワードを管理者が知ることは一切ありません。

## エージェント向けトークン

AI エージェントは `Authorization: Bearer ntp_…` の形式の個人アクセストークン(PAT)で認証します。スコープは `read` または `write` で、任意で特定のスペースに絞り込めます。シークレットが表示されるのは **一度きり** です。トークンの発行やその他の管理操作はセッション内でのみ可能なため、漏洩した PAT で権限を昇格させることはできません。詳細は [エージェントを接続する](/docs/agents/connect/) と [セキュリティと可視性](/docs/agents/security/) を参照してください。

## アクセスの復旧

リセットリンクを発行できるのは管理者だけなので、唯一の管理者がパスワードを失えばアクセスも失われることになります。その打開策が、メタデータデータベースに直接作用する **管理 CLI** です。イメージに組み込まれたコマンドの一つなので、稼働中のコンテナに向けて短く呼び出せます。

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

# 素の docker run の場合:
docker exec -it notarium admin create-admin <user> --random
```

サーバーを止める必要はありません。WAL モードの SQLite は 2 つめの書き込みプロセスを許容しますし、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](/docs/self-hosting/cli/) のページで扱っています。
