コンテンツにスキップ

認証

登録(4ステップ)

登録にはメール認証、パスワード、表示名が必要です:

ステップ1: 確認コードの送信

Terminal window
POST /auth/send-code
{
"email": "user@example.com",
"scene": "register",
"turnstile_token": "..."
}

ステップ2: 登録

Terminal window
POST /auth/register
{
"email": "user@example.com",
"code": "123456",
"account_password": "your-password",
"display_name": "Your Name",
"device_locale": "en-US"
}

アクセストークンとリフレッシュトークン(HttpOnly cookie)が返されます。

ステップ3: クライアント側での鍵生成

登録後、クライアントは以下を行います:

  1. X25519鍵ペアを生成
  2. 暗号鍵を導出:Argon2id(protection_password, random_salt)
  3. 秘密鍵を暗号化:AES-GCM(derived_key, private_key)

ステップ4: 鍵バックアップのアップロード

Terminal window
POST /keys/backup
{
"backup_a": "base64-encrypted-private-key",
"argon2_salt": "base64-salt",
"public_key": "base64-public-key",
"device_id": "device-uuid"
}

ログイン

3つのログイン方法がサポートされています:

パスワードログイン

Terminal window
POST /auth/login
{
"email": "user@example.com",
"account_password": "your-password",
"turnstile_token": "..."
}

ロックアウト: 5回失敗すると、アカウントが15分間ロックされます。423 ACCOUNT_LOCKEDretry_after(秒)が返されます。

確認コードログイン

Terminal window
POST /auth/send-code
{ "email": "user@example.com", "scene": "login", "turnstile_token": "..." }
POST /auth/login-code
{ "email": "user@example.com", "code": "123456" }

Passkeyログイン

Passkeyは認証ステップにおけるアカウントパスワードを置き換えます。新しいデバイスでは、鍵復号のための保護パスワードが引き続き必要です。

Terminal window
POST /auth/passkey/begin # チャレンジを返す(パブリックエンドポイント)
POST /auth/passkey/complete # 署名を検証し、トークンを発行(パブリックエンドポイント)

PasskeyログインはWebAuthn Conditional UIを使用します。ログイン画面に明示的なボタンはありません。対応デバイスでシステムのPasskeyプロンプトが自動的に表示されます。

トークンのリフレッシュ

アクセストークンは5分で期限切れになります。リフレッシュトークンを使用して新しいペアを取得します:

Terminal window
POST /auth/refresh

リフレッシュトークンは以下の属性を持つHttpOnly cookieとして保存されます:

Set-Cookie: refresh_token=...; HttpOnly; Secure; SameSite=Strict; Path=/auth; Max-Age=2592000

パスワードリセット

アカウントパスワードのリセットは暗号鍵に影響しません:

Terminal window
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": "..." }で応答します。

トークン再生成

Terminal window
POST /agents/:id/token/regenerate
{ "emergency": false }
モード旧トークン旧公開鍵
通常(emergency: false7日間有効7日間有効
緊急(emergency: true即座に失効即座に失効

次のステップ