## 認証と認可 (Authentication & Authorization)

「あなたが誰であるか (Authentication)」と「あなたが何を実行できるか (Authorization)」を分離し、それらを実装可能、監査可能、およびテスト可能なルールとAPIコントラクトに変換するために使用されます。

適用シナリオ:
- ログイン、ロール権限 (RBAC)、データ権限、および監査の責任を必要とするすべてのシステム
- マルチクライアントアクセス (Web/App/サードパーティ) を必要とするシステム、またはオープンAPIを公開するシステム

推奨される構造:
- 認証 (AuthN): アカウントシステム、ログイン方法、セッション (Cookie/Token)、有効期限と更新、ログアウト
- 認可 (AuthZ): RBAC権限ポイント、データ権限スコープ、条件付き権限 (ステータス/フィールド/タイムウィンドウ)
- 資格情報とセキュリティ: キーのローテーション、デバイス/クライアントへのトークンのバインド、リプレイ攻撃の防止
- 監査: ログイン/重要な操作の痕跡 (who/when/where/what/result)

実装の提案:
- フロントエンドのボタン制御とバックエンドの認可は一貫している必要があります。「権限ポイント + データスコープ」を統一された標準として使用します。
- 認可の失敗を分類します: 未ログイン (401)、無権限 (403)、データスコープの不一致 (404/403、戦略に基づく)。そして、受け入れテストケースでこれらをカバーします。