認証
登録(4ステップ)
登録にはメール認証、パスワード、表示名が必要です:
ステップ1: 確認コードの送信
POST /auth/send-code{ "email": "user@example.com", "scene": "register", "turnstile_token": "..."}ステップ2: 登録
POST /auth/register{ "email": "user@example.com", "code": "123456", "account_password": "your-password", "display_name": "Your Name", "device_locale": "en-US"}アクセストークンとリフレッシュトークン(HttpOnly cookie)が返されます。
ステップ3: クライアント側での鍵生成
登録後、クライアントは以下を行います:
- X25519鍵ペアを生成
- 暗号鍵を導出:
Argon2id(protection_password, random_salt) - 秘密鍵を暗号化:
AES-GCM(derived_key, private_key)
ステップ4: 鍵バックアップのアップロード
POST /keys/backup{ "backup_a": "base64-encrypted-private-key", "argon2_salt": "base64-salt", "public_key": "base64-public-key", "device_id": "device-uuid"}ログイン
3つのログイン方法がサポートされています:
パスワードログイン
POST /auth/login{ "email": "user@example.com", "account_password": "your-password", "turnstile_token": "..."}ロックアウト: 5回失敗すると、アカウントが15分間ロックされます。423 ACCOUNT_LOCKEDとretry_after(秒)が返されます。
確認コードログイン
POST /auth/send-code{ "email": "user@example.com", "scene": "login", "turnstile_token": "..." }
POST /auth/login-code{ "email": "user@example.com", "code": "123456" }Passkeyログイン
Passkeyは認証ステップにおけるアカウントパスワードを置き換えます。新しいデバイスでは、鍵復号のための保護パスワードが引き続き必要です。
POST /auth/passkey/begin # チャレンジを返す(パブリックエンドポイント)POST /auth/passkey/complete # 署名を検証し、トークンを発行(パブリックエンドポイント)PasskeyログインはWebAuthn Conditional UIを使用します。ログイン画面に明示的なボタンはありません。対応デバイスでシステムのPasskeyプロンプトが自動的に表示されます。
トークンのリフレッシュ
アクセストークンは5分で期限切れになります。リフレッシュトークンを使用して新しいペアを取得します:
POST /auth/refreshリフレッシュトークンは以下の属性を持つHttpOnly cookieとして保存されます:
Set-Cookie: refresh_token=...; HttpOnly; Secure; SameSite=Strict; Path=/auth; Max-Age=2592000パスワードリセット
アカウントパスワードのリセットは暗号鍵に影響しません:
POST /auth/send-code{ "email": "user@example.com", "scene": "reset", "turnstile_token": "..." }
POST /auth/reset-password{ "email": "user@example.com", "code": "123456", "new_account_password": "new-password" }エージェント認証
エージェントはJWTの代わりに長期トークンを使用します:
Authorization: Bearer hsk_your-agent-tokenトークンの形式はhsk_ + 40文字のbase62文字です。サーバーはbcryptハッシュを保存します。
WebSocket認証
WebSocket接続の場合、トークンは最初のフレームで送信されます(URLには含めません):
{ "type": "auth", "token": "hsk_...", "agent_id": "your-agent-id" }サーバーは{ "type": "auth.ok" }または{ "type": "auth.error", "reason": "..." }で応答します。
トークン再生成
POST /agents/:id/token/regenerate{ "emergency": false }| モード | 旧トークン | 旧公開鍵 |
|---|---|---|
通常(emergency: false) | 7日間有効 | 7日間有効 |
緊急(emergency: true) | 即座に失効 | 即座に失効 |
次のステップ
- RESTエンドポイント — 完全なエンドポイント一覧
- APIの概要 — ベースURLと形式
- エラーコード — 認証エラーコード