Skip to content

認証 / 認可

認証基盤

Better Auth を採用する。

項目採用
永続化D1 (Drizzleアダプタ)
セッションストアCookie + DB セッション。短期キャッシュは KV を併用(任意)
サインイン手段Email + Password (MVP)。OAuth(Google等) は後続で追加検討
メール送信招待 / リセット用。プロバイダ未確定(Resend / Mailgun 等)
MFATOTP を MVP に含める(OWNER / ADMIN は必須)。詳細はセキュリティ参照
パスワードポリシー12文字以上、3種以上の文字種。詳細はセキュリティ参照
ロックアウト5回連続失敗で15分ロック

ロールと配置

  • ADMIN ロールは テナントに所属しない ユーザー。/admin/* のみ操作。
  • OWNER / MEMBER必ず1つのテナントに所属する。
  • 1ユーザーが複数テナントに属すケースはMVPでは作らない(招待時に別アカウント扱い)。

テナント解決

  • middleware で c.set('tenantId', ...) のように Hono コンテキストへ注入。
  • DBラッパも tenantId 必須の関数シグネチャにし、書き忘れを型で防ぐ。

ルート分離

パス必要ロール
/OWNER または MEMBER
/admin/*ADMIN のみ
/api/v1/*OWNER / MEMBER(自テナントのみ)
/api/admin/*ADMIN のみ
/api/webhooks/*認証なし、署名検証で防御
/auth/*パブリック

認可マトリクス(暫定)

操作OWNERMEMBERADMIN
テナント設定変更
メンバー招待 / ロール変更
顧客 CRUD参照のみ
契約 CRUD参照のみ
LINE チャネル接続
課金プラン変更
全テナント一覧
決済プロバイダ設定
監査ログ閲覧✅(自テナント)✅(全テナント)

仕様側の権限マトリクス(roles)と整合。実装上は Hono middleware として requireRole('OWNER') / requireAdmin() を提供する。

初期セットアップウィザード(ADMIN作成)

  • system_state.setup_completed フラグ(KV or テーブル)で再表示を防ぐ。
  • ウィザードへのアクセスは IP 制限 / セットアップトークンの検討。

サインアップ / 招待フロー

セッション

  • Better Auth のCookieベース。HttpOnly / Secure / SameSite=Lax
  • Workers の Cookie 取扱いは Hono ミドルウェアで統一。
  • ログアウトは auth.signOut() でセッションテーブルからレコード削除。

設計上の注意

  • テナント越境の防止: ADMIN以外は他テナントのリソースに触れない。middleware 1段では信頼せず、サービス層でも tenantId 比較を入れる二重防御。
  • ロール昇格の監査: ロール変更は必ず監査ログへ。
  • ADMIN権限の最小化: ADMINでも顧客本文(個人情報)の参照は最小限にし、必要時のみ理由ログ付きでアクセスする運用を設計する。

関連

未確定