認証
Nolto は 2 つの認証方式 を提供しています。用途に応じて使い分けてください。
| Personal API Token | OAuth 2.1 + PKCE | |
|---|---|---|
| 対象 | REST API (/api/*) | MCP Server (/mcp) |
| 用途 | curl / スクリプト / CI/CD | Claude Code / Codex / Claude Desktop |
| トークン形式 | nolto_user_* | mcp_at_* (access) / mcp_rt_* (refresh) |
| 有効期限 | 任意(または無期限) | access: 1時間 / refresh: 30日 |
| 取得方法 | Web UI で発行 | ブラウザの OAuth フローで自動取得 |
/mcp エンドポイントは OAuth トークン (mcp_at_*) のみ受け付けます。
Personal API Token (nolto_user_*) を渡しても 401 Unauthorized になります。
Personal API Token
REST API (/api/*) を curl やスクリプトから呼び出すための認証方式です。
トークンの発行
- Nolto にログインし、設定 > API トークン ページを開きます。
- 「新規発行」 をクリックし、名前と有効期限(任意)を設定します。
- 表示されたトークンをコピーします(作成時に一度だけ表示されます)。
利用方法
Authorization ヘッダーに Bearer トークンとして渡します:
curl -H "Authorization: Bearer nolto_user_xxxxxx" \
https://nolto.app/api/projects
セキュリティ
- トークンは安全にハッシュ化して保存されます(平文は保存されません)。
- 有効期限を設定した場合、期限切れ後は自動的に認証が拒否されます。
- いつでも失効(revoke)できます。
トークン管理 API
トークンの一覧取得・作成・失効は API からも操作できます(Cookie セッションが必要)。
# トークン一覧
GET /api/tokens
# トークン作成
POST /api/tokens
Content-Type: application/json
{"name": "CI用トークン", "expiresAt": "2026-12-31T23:59:59Z"}
# トークン失効
POST /api/tokens/{tokenId}/revoke
OAuth 2.1 + PKCE(MCP 用)
MCP クライアント(Claude Code、Codex、Claude Desktop など)が /mcp エンドポイントにアクセスするための認証方式です。
通常、MCP クライアントがこのフローを 自動で 処理するため、開発者が手動で実装する必要はありません。claude mcp add や codex mcp login を実行すると、ブラウザで認可画面が開き、承認するだけで完了します。
フローの概要
- MCP クライアントが
/mcpに接続を試みる →401+WWW-Authenticateヘッダー - メタデータを取得
GET /.well-known/oauth-authorization-server(RFC 8414)GET /.well-known/oauth-protected-resource/mcp(RFC 9728)
- クライアント登録 —
POST /oauth/register(RFC 7591 Dynamic Client Registration)client_idが発行される- Public client のため client secret は不要
- 認可リクエスト — ブラウザで
GET /oauth/authorize- PKCE S256 が 必須(plain は非対応)
resourceパラメータ必須({issuer}/mcp)
- ユーザーが承認 → 認可コードが発行される(有効期限: 60秒、1回のみ使用可能)
- トークン交換 —
POST /oauth/tokenで access token + refresh token を取得 - API アクセス —
Authorization: Bearer <access_token>で/mcpを呼び出し
スコープ
| スコープ | 権限 |
|---|---|
mcp:read | プロジェクト・プランの一覧・詳細取得 |
mcp:write | プロジェクト・プランの作成・更新 |
スコープを指定しない場合は、両方が付与されます。
トークンのライフタイム
| トークン | 有効期間 | 備考 |
|---|---|---|
| Access Token | 1 時間 | |
| Refresh Token | 30 日 | 使用するたびにローテーション(新しいペアが発行される) |
| 認可コード | 60 秒 | 1回のみ使用可能 |
リフレッシュトークンのローテーション
Refresh Token は使用するたびに新しい Refresh Token が発行され、古いものは無効になります(OAuth 2.1 準拠)。
同じ Refresh Token を 2回使用 すると、そのトークンチェーン全体が失効 します。これはトークン漏洩時のセキュリティ対策です。
トークン失効
POST /oauth/revoke でトークンを失効させることができます(RFC 7009 準拠):
POST /oauth/revoke
Content-Type: application/x-www-form-urlencoded
token=<access_token>&token_type_hint=access_token&client_id=<client_id>
- Access Token を失効すると、そのトークンのみが無効化されます。
- Refresh Token を失効すると、関連する全 Access Token も失効 します。
Resource Indicators(RFC 8707)
すべてのトークンには resource クレーム({issuer}/mcp)が紐づきます。/mcp エンドポイントは、トークンの resource が自身の URI と一致するか検証します。異なる protected resource 向けに発行されたトークンは拒否されます。
OAuth エンドポイント一覧
| パス | 説明 |
|---|---|
/.well-known/oauth-authorization-server | Authorization Server メタデータ (RFC 8414) |
/.well-known/oauth-protected-resource/mcp | Protected Resource メタデータ (RFC 9728) |
POST /oauth/register | Dynamic Client Registration (RFC 7591) |
GET /oauth/authorize | 認可エンドポイント |
POST /oauth/token | トークンエンドポイント |
POST /oauth/revoke | トークン失効 (RFC 7009) |